我只想在单词的两边最多包含1个通配符,然后再加上空格或两边都不包含的情况下匹配该单词。例如,我想让戒指匹配“ ring”,“ ring”,“ tring”,“ ring”,“ ringt”,“ ringt”,“ ring”,“ tringt”,“ tringt”
但不是:
'ttring','ringttt','ttringtt'
到目前为止,我有:[?\s\S]ring[?\s\S][?!\s]
有什么建议么?
最佳答案
如果我正确理解,则应该这样做:
(?:^|\s)\S?ring\S?(?:\s|$)
(?:^|\s)
-此非捕获组确保模式前面有空格或在开头\S?
匹配零个或一个非空格字符ring
与文字ring
匹配(?:\s|$)
-零宽度正向超前可确保匹配以空格开头或结尾例:
In [92]: l = ['ring ', ' ringt', ' ringt ', ' ring ', \
'tringt ', 'tringt ', 'ttring', 'ringttt', 'ttringtt']
In [93]: list(filter(lambda s: re.search(r'(?:^|\s)\S?ring\S?(?:\s|$)', s), l))
Out[93]: ['ring ', ' ringt', ' ringt ', ' ring ', 'tringt ', 'tringt ']
关于python - 具有特定前缀/后缀的单词的正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48468009/