我只想在单词的两边最多包含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/

10-09 23:35