将三个正则表达成一个(或两个)

时间:2016-02-07 15:39:22

标签: regex vba word-vba

我想合并我的三个正则表达式,如果可能的话,清除文本(空行,前导和尾随空格等)到一个正则表达式,或者如果不可能 - 合并为两个。

我的第一个正则表达式是[ \t]+。它做了这种清洁。

first image

我的第二个正则表达式是^(?:[\t ]*(?:\r?\n|\r))+不包含图像,因为如果之前的正则表达式没有运行,它将不会捕获任何内容。

第三个正则表达式是^[\s\xA0]+|[\s\xA0]+$。它做了这种清洁。

second image

编辑:我忘记提及在每种情况下我都会将匹配替换为""

编辑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

3 个答案:

答案 0 :(得分:1)

最后一个正则表达式可以合并为

RegEx.Pattern = "^(?:[\t ]*(?:\r?\n|\r)?)*|[ \t]+$"

我不认为有可能在VBA中合并所有3个,因为你使用了两种不同的替换模式。

答案 1 :(得分:0)

如果我没错,你想要匹配和删除所有的行/空格/制表符/白线,这样你就可以合并输入字符串。好吧,如果您在替换程序/脚本/命令中使用以下正则表达式,这很容易并且可以完成:

                 /([\s\t]{0,50}\r?\n)+|\s+/s

正则表达式应该适用于Windows以及基于Linux的文件。

答案 2 :(得分:0)

不是专业人士,但我一个接一个地使用多个正则表达式。如果您不熟悉下面的代码,那么就应该尝试。

Set regEx_ = new regExp
With regEx_
 .Global = True
 .MultiLine = True
 .IgnoreCase = True
 .Pattern = "Pattern 1"
TextLine = regEx_.replace(TextLine, "")
.Pattern = "Pattern 2"
TextLine = regEx_.replace(TextLine, "")
'and so on
End With