Rac*_*cha 2 regex excel vba excel-vba
我有这个正则表达式:
\b[A-Z]{1}[A-Z]{0,7}[0-9]?\b|\b[0-9]{2,3}\b
Run Code Online (Sandbox Code Playgroud)
所述期望的输出是所强调:
约翰去了LONDON一个晴朗的日子.约翰吃过午饭PUB.约翰然后搬到了CHICAGO.我不想JOHN被强调.约翰不希望这与模式匹配.不是这个.但THIS1应该匹配模式.还有其他70时候模式应该匹配.
观察到的输出:
JOHN去了LONDON一个晴朗的日子.
JOHN在一个午餐PUB.
JOHN然后搬到了CHICAGO.
I不想JOHN突出显示.约翰不希望这与模式匹配.不是这个.但THIS1应该匹配模式.还有其他70时候模式应该匹配.
正则表达式部分工作但我不想要两个常量字符串 - JOHN并且I作为此正则表达式的一部分匹配.请帮忙.
您可以使用否定前瞻来排除这些匹配.此外,您的模式似乎相当"冗余",您可以使用分组并删除不必要的子模式来大大缩短它:
\b(?!(?:JOHN|I)\b)(?:[A-Z]{1,8}[0-9]?|[0-9]{2,3})\b
^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
请参阅正则表达式演示
的(?!(?:JOHN|I)\b)是负先行失败比赛如果匹配字的长度等于I或JOHN.
请注意,{1}总是可以省略,因为任何未量化的模式匹配一次.[A-Z]{1}[A-Z]{0,7}实际上等于[A-Z]{1,8}.
图案细节:
\b - 字边界(?!(?:JOHN|I)\b)- 匹配的单词不能等于JOHN或I(?:[A-Z]{1,8}[0-9]?|[0-9]{2,3}) - 两种选择之一:
[A-Z]{1,8}[0-9]? - 1到8个大写ASCII字母,后跟可选(1或0)数字| - 要么[0-9]{2,3} - 2至3位数字\b - 尾随字边界