使用Python re库解决多个正则表达式选项问题

时间:2014-01-13 22:27:18

标签: python regex

我正在使用python RE库(http://docs.python.org/2/library/re.html)。我正在尝试搜索字符串中的各种子字符串。我有以下功能:

def checkformatch(search_str):

  to_find = re.compile("yes|[ +y +]|[^y +]")
  match_obj = to_find.search(search_str)
  which_word_matched = match_obj.group() if match_obj else ''
  return which_word_matched

搜索字符串看起来像:

search_str = "blah fish cat dog yes haha y no"

我想检查一个单词'y'(表示是)或是

前两个选项:

re.compile("yes|[^y +]|[ +y +]")

工作,但第三个没有。有人能帮助我吗?

编辑:我正在使用re.compile,因为它能够使用'|'运营商。我可能需要选择在将来搜索“bob”或“what is up”等附加字符串,我认为这种结构会给我“成长空间”。有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

您只需查找带有字边界的条件yesy

re.compile(r'\b(yes|y)\b')

工作示例:http://regex101.com/r/oL0vZ7

答案 1 :(得分:1)

要查找yesy的实例,您可能需要一个如下所示的正则表达式:

re.compile(r'\b(yes|y)\b')

即,字边界之间的yesy(例如空格)


您的正则表达式(yes|[^y +]|[ +y +])符合以下任何一项:

  • “是”
  • 除“y”,“”或“+”
  • 之外的任何单个字符
  • 任何单个字符“y”,“”或“+”

换句话说,它匹配任何单个字符,这可能不是你想要的。

比照使用re.DEBUG编译正则表达式的输出:

branch 
  literal 121 # y
  literal 101 # e
  literal 115 # s
or
  in 
    negate None
    literal 121 # y
    literal 32  # <space>
    literal 43  # +
or
  in 
    literal 32  # <space>
    literal 43  # +
    literal 121 # y
    literal 32  # <space>
    literal 43  # +