Skip to main content
 首页 » 编程设计

Python正则表达式避免匹配单词后跟多个条件

2025年05月04日29lexus

我想使用 Python 3 匹配句子中间的大写字符单词。这是我当前的正则表达式:

.+?\b([A-Z]+)\b(?=[^.!?][^ ]) 

所以我想避免匹配后跟这组字符 [^.!?] 和 空格的单词。但此表达式也匹配后跟句点且没有 空格的单词。我的错误是什么?

即,目前我使用 re.findall() with 和 without 末尾的空格得到相同的结果搜索字符串:

>>> re.findall(r'.+?\b([A-Z]+)\b(?=[^.!?][^ ])','NO YES YES YES YES NO. ') 
['YES', 'YES', 'YES', 'YES'] 
>>> re.findall(r'.+?\b([A-Z]+)\b(?=[^.!?][^ ])','NO YES YES YES YES NO.') 
['YES', 'YES', 'YES', 'YES'] 

请您参考如下方法:

用负前瞻试试这个正则表达式:

r'(?!^)\b([A-Z]+)\b(?![.!?] )' 

(?!^) 将跳过句子开头的单词。

(?![.!?] ) 当单词后跟其中一个字符后跟一个空格时,匹配将失败。

示例:

>>> re.findall(r'(?!^)\b([A-Z]+)\b(?![.!?] )','NO YES YES YES YES NO.') 
['YES', 'YES', 'YES', 'YES', 'NO'] 
 
>>> re.findall(r'(?!^)\b([A-Z]+)\b(?![.!?] )','NO YES YES YES YES NO. ') 
['YES', 'YES', 'YES', 'YES']