【问题标题】:Merge Three Regexes into One (or Two)将三个正则表达式合并为一个(或两个)
【发布时间】: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 一如既往的完美。那么,如果每次都用相同的字符(即"")替换这三个正则表达式,是否可以合并它们?如果是这样,那对我有用。
  • 是的,如果您只使用| 交替运算符,它将起作用。

标签: regex vba ms-word


【解决方案1】:

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

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

我认为没有机会在 VBA 中合并所有 3 个,因为您使用的是两种不同的替换模式。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      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
      

      【讨论】:

      • 这正是我使用的。但我想合并这些正则表达式,而不是使用我目前使用的。
      • 如果您找到答案,请分享,因为它对像我这样的用户也很有用。
      • @menteith:所以你不能一次性完成一系列替换。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多