我尝试了很多次更改,但都没有成功,99%的成功匹配。
我想要合适的可选空间。并替换组1,2,3,4,5而不是像(.sys)
那样的空间,而不是空间(.sys )
正则表达式搜索:
(?<size>[+-]?(?:(?:[0-9]{1,3}(?:,[0-9]{3})+|[0-9]+)(?:.[0-9]+)?|.[0-9]+))[tx20]*(?<size_type>(?i)gb|mb|m|g)[tx20]*(?<file>.+(?=.)|.+)(?<type>(?:..*)?)s*|s*(?<path>(?i:C|D):.*\)
正则表达式替换:
(1)(2)(3)(4)(5)
文本:
3.9 GB pagefile.sys | C:
3.9 GB pagefile.sys |C:
3.9 GB pagefile.sys| C:
3.9 GB pagefile.sys|C:
3.9 GB pagefile.sys | C:
3.9 GBpagefile.sys | C:
3.9GB pagefile.sys | C:
3.9GBpagefile.sys | C:
我想要的预期行为:
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
实际行为:
(3.9)(GB)(pagefile)(.sys )(C:)
(3.9)(GB)(pagefile)(.sys )(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys)(C:)
(3.9)(GB)(pagefile)(.sys )(C:)
(3.9)(GB)(pagefile)(.sys )(C:)
(3.9)(GB)(pagefile)(.sys )(C:)
(3.9)(GB)(pagefile)(.sys )(C:)
请参阅此处的regex101.com链接
有人帮忙吗?
您在替换中看到额外空间的原因是,匹配类型(?<type>(?:..*)?)
中的.*
也可以匹配空间。
如果必须至少有一个点,您可以使用S*
匹配可选的非空白字符来限制它。
size_type的替换也可以使用字符类(?<size_type>(?i)[gm]b|[mg])
来编写,对于路径(?<path>(?i:[CD]):.*\)
也是如此
整个模式可能看起来像:
(?<size>[+-]?(?:(?:[0-9]{1,3}(?:,[0-9]{3})+|[0-9]+)(?:.[0-9]+)?|.[0-9]+))[tx20]*(?<size_type>(?i)[gm]b|[mg])[tx20]*(?<file>.+(?=.)|.+)(?<type>(?:.S*)?)s*|s*(?<path>(?i:[CD]):.*\)
Regex演示
如果总是有一个管道字符和一个后面跟着:
的单个字符C或D,另一个选项可能是:
(?<size>[+-]?(?:(?:[0-9]{1,3}(?:,[0-9]{3})+|[0-9]+)(?:.[0-9]+)?|.[0-9]+))[tx20]*(?<size_type>(?i)gb|mb|m|g)[tx20]*(?<file>[^s|]+)(?<type>.[^|s]+)[tx20]*|[tx20]*(?<path>(?i:[CD]):\)
Regex演示