有人可以解释python re的这种奇怪的行为吗?显然字符串'test'不包含'Bid'或'Ask'。为什么这匹配?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 匹配!
答案 0 :(得分:10)
[...]
定义一个字符类,匹配里面列出的任何字符。你想要的是par = r'(Bid|Ask)'
。
但是,根本不应该使用正则表达式,请执行以下操作:
if whatever in ('Bid', 'Ask'):
# it's one of these two
else:
# it isn't
如果您需要执行子字符串检查(感谢@agf):
if any(word in whatever for word in ('Bid', 'Ask')):
# one of the words is in the sting whatever
答案 1 :(得分:5)
[...]
是character class matcher,这意味着它将匹配集合中的任何字符。
您可能需要更改,例如:r'(Bid|Ask)'
。
答案 2 :(得分:2)
你的正则表达式只是一个包含字符'B','i','d','|','A','s'和'k'的字符集。 “测试”中有's'。
你可能的意思是“(买|卖)”
答案 3 :(得分:1)
我认为你想要()
而不是[]
。您已告诉它匹配组Bid|Ask
中的任何单个字符,字符串包含s
。
答案 4 :(得分:0)
你的正则表达式正在搜索字符集B,i,d,|,A,s,k。 '''匹配'test'。
您应该省略括号。
此外,如果你不想匹配像“Askify”这样的字符串,你需要更多地改进你的正则表达式。