具有特定前缀/后缀的单词的正则表达式

时间:2018-01-26 19:10:13

标签: python regex

我想匹配这个单词只有当这个单词被两边最多1个野性字符所包围,然后是空格或两边都没有。例如,我希望戒指匹配' ring' ,'环' ,' tring',' ring','铃声',''铃声','戒指',' tringt',' tringt'

但不是: ' ttring',' ringttt',' ttringtt'

到目前为止,我有:

[?\s\S]ring[?\s\S][?!\s]

有什么建议吗?

1 个答案:

答案 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 ']