请教python正则匹配的一个问题

我想判断一个字符串里是不是包含两个单词 name 和 hillerliao (忽略大小写),但如下代码匹配出来的结果是 None,为什么?该怎么做才能匹配出结果?感谢。

import re
text = "Hello my name is Hillerliao"
regx = "(n|N)ame.*(h|H)illerliao"
re.match(regx, text)
阅读 2.5k
3 个回答
re.match 会从字符串开头匹配,你这个需求得使用re.search

re.search(r'name.*hillerliao', text, re.I) # re.I 忽略大小写  这个只考虑了name在hillerliao前面的情况

如果没先后顺序可以用这个: 'name.*hillerliao|hillerliao.*name' 

找到另一种方案:

用 search 是比较好。match 的话可以这样:

import re
text = "Hello my name is Hillerliao"
regx = r'.*(name.*hillerliao|hillerliao.*|name.*).*'
print(re.match(regx, text, re.I))

正确的写法

>>> import re
>>> s = "Hello my name is Hillerliao"
>>> ptn = r'(?=^.*?name)(?=^.*?hillerliao)'
>>> print('有' if re.search(ptn, s, re.I) else '无')
有
>>> 
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题