我有以下表达式,它应该以不区分大小写的方式匹配整个给定的单词.Quotes是单词的一部分,所以我检查单词是否在任何引号之前或之后。例如,单词“foo”不应与文本“foo”匹配。
word = "foo"
pattern = re.compile(r'(?<![a-z\'])%s(?![a-z\'])' % word,flags=re.IGNORECASE)
例外情况是三重引号,如果该单词位于它应匹配的三重引号内(旁边):
pattern.search("'''foo bar baz'''")
“foo”应该在这次找到,但不会因为这个单词前面有一个引号。
答案 0 :(得分:0)
((?<![a-z\'\"])|(?<=\'{3}))foo((?![a-z\'\"])|(?=\'{3}))
答案 1 :(得分:0)
使用正则表达式(?:(?<=''')|(?<!'))\bfoo\b(?:(?=''')|(?!'))
pattern = re.compile(r'(?:(?<=\'\'\')|(?<!\'))\b%s\b(?:(?=\'\'\')|(?!\'))' % word,flags=re.IGNORECASE)
答案 2 :(得分:0)
不使用先行:
>>> 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()
('',)