有人可以解释这种奇怪的python行为吗?显然,字符串'test'不包含'Bid'或'Ask'。为什么匹配?为什么这个python重新匹配?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 相配!
有人可以解释这种奇怪的python行为吗?显然,字符串'test'不包含'Bid'或'Ask'。为什么匹配?为什么这个python重新匹配?
import re
pat=r'[Bid|Ask]'
reg=re.compile(pat)
if reg.search('test'): print "matched!"
... 相配!
[...]
定义字符类,匹配中所列出的任何字符。你想要的是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
您的正则表达式只是一个包含字符'B','i','d','|','A','s'和'k'的字符集。 '测试'中有's'。
什么你大概的意思是“(竞标| ASK)”
我想你想要()
而不是[]
。您已经告诉它匹配组Bid|Ask
中的任何单个字符,而字符串包含s
。
(该字符串包含* s *,而不是* d *。) – kojiro
@kojiro,谢谢 - 我正在查看输出字符串,而不是输入! –
您的正则表达式正在搜索字符集B,i,d,|,A,s,k。 '''匹配'测试'内。
您应该省略括号。
另外,如果您不想匹配“Askify”等字符串,则需要再修正一下正则表达式。
+1更快,并建议更好的方式,而不需要正则表达式。 – birryree
或者根据您是否想要接受子字符串匹配,可能有'any(word中的单词('Bid','Ask'))'。 – agf
啊。谢谢。实际上,我需要匹配任何包含Bid或Ask的行,所以我认为我仍然需要使用re。 – Dave31415