正则表达式单词边界+引号

时间:2012-07-04 14:14:57

标签: python regex

我有以下表达式,它应该以不区分大小写的方式匹配整个给定的单词.Quotes是单词的一部分,所以我检查单词是否在任何引号之前或之后。例如,单词“foo”不应与文本“foo”匹配。

word = "foo"
pattern = re.compile(r'(?<![a-z\'])%s(?![a-z\'])' % word,flags=re.IGNORECASE)

例外情况是三重引号,如果该单词位于它应匹配的三重引号内(旁边):

pattern.search("'''foo bar baz'''")

“foo”应该在这次找到,但不会因为这个单词前面有一个引号。

3 个答案:

答案 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()
('',)