繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM