我在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}\))"
答案 0 :(得分:1)
如果你想使用OR
操作数,你不应该把你的文字放在一个字符类中。相反,您可以使用capture group:
(First|Second|Third|1|2|3)
因为在字符类中,正则表达式引擎将您的模式假设为单词字符和字符|
之间的任意组合。
为了更好地理解,请参见下图:
[First|Second|Third|1|2|3]
(First|Second|Third|1|2|3)
答案 1 :(得分:1)
字符类([]
)字面上匹配任何包含的字符。因此,[First|Second|Third|1|2|3]
匹配F
,i
,r
,s
,t
,|
,{{1}等等。
您希望在角色类之外使用替换。您可以使用S
对此进行分组,或者如果您需要非捕获组(...)
。
尝试将(?:...)
替换为[First|Second|Third|1|2|3]
。