我正在尝试检查某个字符串是否包含使用正则表达式的首字母缩略词。
我现在的正则表达式:
re.search(r'\b[A-Z]{3}', string)
目前它向USA
,NYCs
和NSFW
输出true,但它不应该在NSFW
上说明,因为它是四个字母的首字母缩写,而不是三个。
如何重新调整正则表达式以使其不接受NSFW
,但仍接受NYCs
编辑:它也应该接受NYC,
答案 0 :(得分:1)
否定先行断言:(?!pattern)
re.search(r'\b[A-Z]{3}(?![A-Z])',string)
这要求三重资本模式永远不会被另一个大写字母所遵循,而它并不意味着其他限制,例如模式必然会被某些东西所遵循。 认为“没有跟着P”和“跟着不是P”
尝试:
filter(re.compile(r'\b[A-Z]{3}(?![A-Z])').search, ['.ANS', 'ANSs', 'AANS', 'ANS.'])
答案 1 :(得分:0)
>>> import re
>>> rexp = r'(?:\b)([A-Z]{3})(?:$|[^A-Z])'
>>> re.search(rexp, 'USA').groups()
('USA',)
>>> re.search(rexp, 'NSFW') is None
True
>>> re.search(rexp, 'aUSA') is None
True
>>> re.search(rexp, 'NSF,').groups()
('NSF',)
答案 2 :(得分:-2)
您可以使用?表示字符是可选的,{0,1}是等效的。
你可以在方括号 [] 中放置你想要匹配的任何字符,它将匹配0或1次NYC中的任何一个。或WIN或FOO,将匹配。
将 $ 添加到结尾,以便在匹配后不再指定字符
re.search(r'\b[A-Z]{3}[s,.]?$', string)