0

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

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

例外是三引号,如果单词在它应该匹配的三引号内(旁边):

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

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

4

3 回答 3

0

Without using lookahead:

>>> 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()
('',)
于 2012-07-05T08:49:56.950 回答
0
((?<![a-z\'\"])|(?<=\'{3}))foo((?![a-z\'\"])|(?=\'{3}))
于 2012-07-04T14:34:44.150 回答
0

使用正则表达式(?:(?<=''')|(?<!'))\bfoo\b(?:(?=''')|(?!'))

pattern = re.compile(r'(?:(?<=\'\'\')|(?<!\'))\b%s\b(?:(?=\'\'\')|(?!\'))' % word,flags=re.IGNORECASE)
于 2012-07-04T14:35:34.100 回答