我试图检查某个字符串是否包含使用regex的首字母缩略词。
我目前的判断力:
re.search(r'\b[A-Z]{3}', string)
目前,它输出的是USA
、NYCs
和NSFW
,但在NSFW
上不应该说true,因为它是四个字母的缩写,而不是三个。
如何调整正则表达式,使其不接受NSFW
,但仍然接受NYCs
编辑:它也应该接受NYC,
发布于 2014-02-09 01:47:43
>>> 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',)
发布于 2014-02-09 01:58:55
负前瞻性断言:(?!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.'])
发布于 2014-02-09 01:36:29
可以使用来表示字符是可选的,{0,1}将是等效的。
你可以把你想要匹配的任何字符放在方括号中,,,它会匹配任意一个0或1次,所以纽约。或者赢或者是福,都会匹配的。
将$添加到末尾,以便在允许匹配后不指定更多字符
re.search(r'\b[A-Z]{3}[s,.]?$', string)
https://stackoverflow.com/questions/21657407
复制相似问题