我一直在努力教自己正则表达,因为我到目前为止大部分时间都避免使用它。
但是我有一个益智游戏。
这是代码。
import re
listostuff = [ "crustybread", "rusty nail", "grust0", "superrust"]
for item in listostuff:
result = True if re.match(r'[a-z]+rust[a-z0-9\s \t\s+]+', item) else False
print item, result
以及结果:
crustybread True
rusty nail False
grust0 True
superrust False
我希望superrust不匹配,但我希望"生锈的指甲"匹配这个。
我已经把我可以在重新设置中找到的每个空白角色都放了,但它并没有把它拿起来。我也试过单一的组合。它们似乎与生锈的指甲相匹配。
有人可以告诉我我做错了什么吗? (顺便说一句,我搜索了这个网站,空白字符似乎就是我在这里的字符。
所以我的目标是让所有的比赛都成真,除了超级推力。
答案 0 :(得分:1)
您需要确保该模式允许在开头匹配 0 或更多字母,将[a-z]+
替换为[a-z]*
:
re.match(r'[a-z]*rust[a-z0-9\s]+', item)
^
请注意,re.match
仅在字符串开头处锚定匹配项,如果您希望整个输入字符串与您的模式匹配,请在模式的末尾添加$
。
请参阅regex demo。
答案 1 :(得分:0)
问题是\s+
无法在[]
内执行您想要的操作。
你需要像rust[a-z0-9]+\s+[a-z0-9]+
这样的东西,这将占用所需的空间而不是可选的。