Word VBA中的正则表达式

时间:2015-06-08 21:51:42

标签: regex vba ms-word

我在VBA for MS Word中使用以下正则表达式语法:

regEx.Pattern = "\w*\(\w*\s[0-9]{1,3}:[0-9]{1,3}(\)|\-[0-9]{1,3}\))"
MsgBox regEx.test("This is a test (Chronicles 13:12-14)")

根据需要返回True。当我试图在我的左括号之后立即包含“第一”,“第二”,“第三”,第1,2,3或任何内容的模式时,我遇到了困难。我试过了[First|Second|Third|1|2|3]?但是当我在括号内添加任何字符串/数字时返回false。我错过了什么?

感谢您的解释和建议。我添加了一个最后的“|”之后没有任何东西来解释缺少任何数字。我还必须在每个选项中添加空格。最终工作版本为 "\w*\((First |Second |Third |[1-3] |)\w*\s[0-9]{1,3}:[0-9]{1,3}(\)|\-[0-9]{1,3}\))"

2 个答案:

答案 0 :(得分:1)

如果你想使用OR操作数,你不应该把你的文字放在一个字符类中。相反,您可以使用capture group

(First|Second|Third|1|2|3)

因为在字符类中,正则表达式引擎将您的模式假设为单词字符和字符|之间的任意组合。

为了更好地理解,请参见下图:

[First|Second|Third|1|2|3]

Regular expression visualization

Debuggex Demo

(First|Second|Third|1|2|3)

Regular expression visualization

Debuggex Demo

答案 1 :(得分:1)

字符类([])字面上匹配任何包含的字符。因此,[First|Second|Third|1|2|3]匹配First|,{{1}等等。

您希望在角色类之外使用替换。您可以使用S对此进行分组,或者如果您需要非捕获组(...)

尝试将(?:...)替换为[First|Second|Third|1|2|3]