【问题标题】:Is there a better way to group words for the Regexp Or operator?有没有更好的方法来为 Regexp Or 运算符分组单词?
【发布时间】:2017-03-27 20:02:59
【问题描述】:

在 VBA 中使用正则表达式(Microsoft VBScript 正则表达式 5.5)时,我经常发现自己在寻找几个单词中的一个作为更大模式的一部分。我通常的做法是在每个单词周围使用括号,用竖线| OR 运算符分隔。

例如:((mitt)|(bat)|(ball)|(mask))

整个组的最后一组括号让我找出匹配的单词。内括号是让 OR 作用于每个完整的单词,而不仅仅是单词的第一个/最后一个字母。

但是,我最终得到了一堆毫无价值的子匹配——括号中的每个单词都有一个。有没有更好的方法来为 OR 运算符分组“单词”?

【问题讨论】:

  • 我对 vba 没有太多经验,但您根本不需要内括号。 | 拆分外括号的内容。如果您愿意,可以将 ?: 添加到每个括号组的开头,以免在匹配结果中捕获该组。
  • 外部组可以是可选的,或者内部组可以被删除——这完全取决于你的需要。
  • 感谢玛丽和维克托。 Marie,Microsoft 的实现是否支持 ?: 构造?根据我正在查看的文档,事实并非如此。但我可能会遗漏一些东西......
  • ECMAScript 正则表达式支持非捕获组。
  • 实际上,VBScript 正则表达式 5.5确实 支持非捕获组 (?:) 和前瞻/负前瞻等功能。我查看的文档不是旧的就是不完整的。

标签: regex vba com


【解决方案1】:

你不需要内括号:

(mitt|bat|ball|mask)

够了。见Alternation with The Vertical Bar or Pipe Symbol

【讨论】:

  • 谢谢,托马斯。多年来,我一直在努力做到这一点。很高兴我问了。
猜你喜欢
  • 1970-01-01
  • 2019-08-13
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
相关资源
最近更新 更多