【问题标题】:Regex for finding a phrase that isn't already updated用于查找尚未更新的短语的正则表达式
【发布时间】:2016-12-23 18:08:35
【问题描述】:

我正在寻求有关 Regex 的帮助。我有一个项目,我正在编写一个 VBA 宏,通过查找/替换一个短语来更新数十万个文档。短语是“公司名称”,需要是“公司名称 LLP”。问题是,使用查找/替换,如果之前已更新,我无法阻止“公司名称 LLP”变成“公司名称 LLP LLP”(两个 LLP)。我的解决方法是找到“LLP LLP”并替换为“LLP”,但显然有更好的方法使用正则表达式。我想要一个正则表达式,它可以找到所有“公司名称”而不是“公司名称 LLP”(更好的是,它也可以用逗号排除“公司名称,LLP”)。谁能帮助我构建这个正则表达式?蒂亚!

【问题讨论】:

  • 使用Company Name(?!\s+LLP)
  • 您好 Wiktor,感谢您的快速回复!有没有办法让它不区分大小写,以便它也能找到“公司名称”?
  • 您可以在正则表达式对象上设置区分大小写。
  • 知道了!非常感谢你! :)

标签: regex vba ms-word negative-lookbehind


【解决方案1】:

您可以使用 (?!\s+LLP) 否定前瞻来避免在 1+ 个空格和 LLC 字之前匹配 Company Name

Company Name(?!\s+LLP)

如果这些是整个单词,请用单词边界括起来:

\bCompany Name\b(?!\s+LLP\b)

要使表达式不区分大小写,请在 RegExp 对象上启用不区分大小写模式。

例子:

Set myRegExp = New RegExp
myRegExp.IgnoreCase = True 'Here, case insensitive mode is ON
myRegExp.Global = True
myRegExp.Pattern = "\bCompany Name\b(?!\s+LLP\b)"

【讨论】:

  • 谢谢。我现在正在尝试排除“公司名称,LLP”(带逗号)。我正在使用“\bCompany & Name\b(?!\s+LLP|\, LLP\b)”。这是最好的方法还是有更优雅的方法?我对 Regex 很陌生……最后,有没有办法找到“公司和名称”或“公司和名称”?我试过:"\bCompany (&|and) Name\b" 但中间的括号正在生成另一个匹配项。
  • 还有一个更好的(?!,?\s+LLP\b),要同时匹配and&,请使用(?:and|&)\bCompany\s+(?:and|&)\s+Name\b(?!,?\s+LLP\b)
  • Wiktor,你先生真棒。这需要我很长时间才能弄清楚。我的最终正则表达式是:\bCompany (?:and|&) Name\b(?!,?\s+LLP\b) 谢谢!
猜你喜欢
  • 2017-08-18
  • 2022-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多