【发布时间】:2016-02-07 15:39:22
【问题描述】:
如果可能的话,我想将我的三个清理文本(空行、前导和尾随空格等)的正则表达式合并为一个正则表达式,或者如果不可能的话,将其合并为两个。
我的第一个正则表达式是[ \t]+。它会进行这种清洁。
我的第二个正则表达式是 ^(?:[\t ]*(?:\r?\n|\r))+ 不包含图像,因为如果前一个正则表达式没有运行,它不会捕获任何内容。
第三个正则表达式是^[\s\xA0]+|[\s\xA0]+$。它会进行这种清洁。
编辑:我忘了提到在每种情况下我都将匹配替换为空""。
编辑 2: 我在 Word 中使用以下代码:
With selection
Dim RegEx As Object
Set RegEx = CreateObject("VBScript.RegExp")
RegEx.Global = True
RegEx.MultiLine = True
' clean selection
RegEx.Pattern = "[ \t]+"
.Text = RegEx.Replace(.Text, " ")
RegEx.Pattern = "^(?:[\t ]*(?:\r?\n|\r))+"
.Text = RegEx.Replace(.Text, "")
' the following is from http://stackoverflow.com/a/24049145/2657875
RegEx.Pattern = "^[\s\xA0]+|[\s\xA0]+$"
.Text = RegEx.Replace(.Text, "")
End With
【问题讨论】:
-
你用相同的模式替换吗?还要注意
\s包含\x0A,不用[\s\xA0],\s就够了。 -
@WiktorStribiżew 再次嗨。我已经更新了我的第一篇文章。
-
因此,不可能只使用一个 RegExp.Replace。使用两个:1)
^(?:[\t ]*(?:\r?\n|\r))+|[ \t]+替换为vbCr,2)^\s+|\s+$替换为空。如果最后一个正则表达式未与多行选项一起使用,请考虑只使用Trim(),然后您只需要第一个正则表达式。 -
@WiktorStribiżew 一如既往的完美。那么,如果每次都用相同的字符(即
"")替换这三个正则表达式,是否可以合并它们?如果是这样,那对我有用。 -
是的,如果您只使用
|交替运算符,它将起作用。