在用于MS Word的VBA中,我有以下正则表达式语法,它可以工作:
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。当我试图将“第一”、“第二”、“第三”、第一、第二、第三、第一、第一、第二、第三、第一、第二、第三、第一、第二、第我试过[First|Second|Third|1|2|3]了吗?但是,当我在括号中添加任何这些字符串/数字时,这会返回false。我遗漏了什么?
谢谢你的解释和建议。我在后面添加了一个最后的“x”,但之后没有任何内容,以解释没有任何数字。我还必须在每个选项中添加空格。最后的工作版本是"\w*\((First |Second |Third |[1-3] |)\w*\s[0-9]{1,3}:[0-9]{1,3}(\)|\-[0-9]{1,3}\))"
发布于 2015-06-08 21:57:14
字符类([])字面上匹配任何包含的字符。正因为如此,[First|Second|Third|1|2|3]匹配了F、i、r、s、t、|、S等。
您将希望在字符类之外使用替换。可以使用(...)对其进行分组,也可以使用非捕获组(?:...)对其进行分组。
尝试将[First|Second|Third|1|2|3]替换为(?:First|Second|Third|[1-3])。
发布于 2015-06-08 21:55:14
如果要使用OR操作数,则不应该将单词放在字符类中。相反,您可以使用俘获群:
(First|Second|Third|1|2|3)因为在字符类中,regex引擎假设您的模式是单词的字符和字符|之间的任意组合。
要获得更好的理解,请参见以下图表:
[First|Second|Third|1|2|3]

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

https://stackoverflow.com/questions/30719710
复制相似问题