正则表达式只匹配一个单词,如果它是前面多于1个字母的单词的后缀

时间:2017-12-06 13:11:54

标签: regex

我有这个正则表达式: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')

但是这太丑了,我确信这可以通过正则表达式轻松完成,但我不知道如何。

1 个答案:

答案 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 - 字边界

Python demo

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')