我想匹配这个单词只有当这个单词被两边最多1个野性字符所包围,然后是空格或两边都没有。例如,我希望戒指匹配' ring' ,'环' ,' tring',' ring','铃声',''铃声','戒指',' tringt',' tringt'
但不是: ' ttring',' ringttt',' ttringtt'
到目前为止,我有: [?\s\S]ring[?\s\S][?!\s]
有什么建议吗?
答案 0 :(得分:1)
如果我理解正确,应该这样做:
(?:^|\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 ']