Answers:
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
xyz
),并想知道哪种方法更有效,我应该使用python 'xyz' in given_text
还是use re.compile(r'xyz').search(given_text)
?
[]
括号包含的字符类,让你重新也匹配:>>>字=“BA |”; regexp.search(word)<_sre.SRE_Match对象位于0x101030b28> 您可以删除所有管道符号。
到目前为止最好的是
bool(re.search('ba[rzd]', 'foobarrrr'))
返回真
bool
。OP:“ True
如果单词包含小节,ba或坏声,则必须返回。” 其他答案使用的行为是if
-将表达式自动转换为a的权利bool
。例如import re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')
=> <re.Match object; span=(2, 5), match='bar'>
,但if(rgx.search(w)): print('y')
=> y
。我可以找到的最接近自动转换的文档(存档)
Match
对象始终为true,None
如果不匹配,则返回。只是测试真实性。
码:
>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
...
'bar'
输出= bar
如果您想要search
功能
>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
... m.group(0)
...
'bar'
如果regexp
找不到
>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
... else:
... print "no match"
...
no match
如@bukzor所述,如果st = foo bar
than match将不起作用。因此,它更适合使用re.search
。
search
而不是match
。(请参阅docs.python.org/library/re.html#matching-vs-searching。)另外,我认为,如果以正确的顺序显示实际可能的参数,而不是仅仅显示,可能会有所帮助...
。
st
为"foo bar"
,则match方法将在此处不起作用。您要搜索。
in
和搜索子字符串的复杂度有何不同regex
?
这是一个执行您想要的功能的函数:
import re
def is_match(regex, text):
pattern = re.compile(regex, text)
return pattern.search(text) is not None
正则表达式搜索方法成功返回一个对象,如果在字符串中未找到模式,则返回None。考虑到这一点,只要搜索为我们提供了一些回报,我们就会返回True。
例子:
>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
您可以执行以下操作:
如果搜索与您的搜索字符串匹配,则使用搜索将返回SRE_match对象。
>>> import re
>>> m = re.search(u'ba[r|z|d]', 'bar')
>>> m
<_sre.SRE_Match object at 0x02027288>
>>> m.group()
'bar'
>>> n = re.search(u'ba[r|z|d]', 'bas')
>>> n.group()
如果没有,它将返回无
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
n.group()
AttributeError: 'NoneType' object has no attribute 'group'
只是打印它以再次演示:
>>> print n
None
bool(re.search('ba[rzd]', 'sometext'))
。