我有这个正则表达式:wine($|\s|,|;)+
这个工作正常,但我遇到了一个问题,即这也会与swine
匹配。因此,我只想匹配它,如果它是葡萄酒前面至少有2个字符的单词的后缀,那么为了说明它应匹配像trwine, thisiswine, thewine
这样的单词,因此不匹配swine, this is a swine
之类的单词
当然,我可以这样做:
import re
word = 'wine'
string = 'wine'
pattern = re.compile(".{}($|\s|,|;)+".format(word)) #word as suffix
match = pattern.search(string)
if match:
if len(match.group(0)) > len(word) + 1:
print(match)
else:
print('no match')
但是这太丑了,我确信这可以通过正则表达式轻松完成,但我不知道如何。
答案 0 :(得分:1)
您可以使用像
这样的正则表达式pattern = re.compile(r"[^\W\d_]{{2,}}{}\b".format(word))
看起来像[^\W\d_]{2,}wine\b
,请参阅regex demo。
<强>详情
[^\W\d_]{2,}
- 2个或更多字母wine
- wine
substring \b
- 字边界import re
word = 'wine'
s = 'words like trwine, thisiswine, thewine and thus not things like swine, this is a swine'
pattern = re.compile(r"[^\W\d_]{{2,}}{}\b".format(word))
match = pattern.search(s)
if match:
print(match.group())
else:
print('no match')