[英]regex word boundaries+quotes
我有以下表达式,应以不区分大小写的方式匹配整个给定单词。引号是单词的一部分,因此我检查单词是否在任何引号之前或之后。 例如,单词“ foo”不应与文本“ foo's”匹配。
word = "foo"
pattern = re.compile(r'(?<![a-z\'])%s(?![a-z\'])' % word,flags=re.IGNORECASE)
三重引号是一个例外,如果单词在三引号内(紧随其后),则应匹配:
pattern.search("'''foo bar baz'''")
这次应该找到“ foo”,但这不是因为单词前加了引号。
((?<![a-z\'\"])|(?<=\'{3}))foo((?![a-z\'\"])|(?=\'{3}))
使用正则表达式(?:(?<=''')|(?<!'))\\bfoo\\b(?:(?=''')|(?!'))
pattern = re.compile(r'(?:(?<=\'\'\')|(?<!\'))\b%s\b(?:(?=\'\'\')|(?!\'))' % word,flags=re.IGNORECASE)
不使用前瞻性:
>>> pat = r'([\'\"]{3}|\b)foo\1'
>>> m = re.search(pat, 'My """foo""" is rich')
>>> re.search(pat, 'My """foo""" is rich').groups()
('"""',)
>>> re.search(pat, "My '''foo''' is rich").groups()
("'''",)
>>> re.search(pat, 'My """foo"" is rich').groups()
('',)
>>> re.search(pat, 'My """foo\'\'\' is rich').groups()
('',)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.