当我需要在输出/替换中去掉空格字符时,我将regex硬转换为可选空格字符



我尝试了很多次更改,但都没有成功,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演示

最新更新