python的re:如果字符串包含正则表达式模式,则返回True


98

我有一个这样的正则表达式:

regexp = u'ba[r|z|d]'

如果单词包含barbazbad,则函数必须返回True 。简而言之,我需要python的regexp模拟

'any-string' in 'text'

我怎么知道呢?谢谢!


17
只需使用bool(re.search('ba[rzd]', 'sometext'))
Raymond Hettinger 2012年

Answers:


152
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
  print 'matched'

1
我正在研究类似的情况,我想搜索确切的字符串(xyz),并想知道哪种方法更有效,我应该使用python 'xyz' in given_text还是use re.compile(r'xyz').search(given_text)
bawejakunal,2016年

1
[]括号包含的字符类,让你重新也匹配:>>>字=“BA |”; regexp.search(word)<_sre.SRE_Match对象位于0x101030b28> 您可以删除所有管道符号。
radtek

104

到目前为止最好的是

bool(re.search('ba[rzd]', 'foobarrrr'))

返回真


2
为什么这比其他解决方案更好?
kres0345

1
一方面,它返回一个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我可以找到的最接近自动转换的文档存档
bballdave025

15

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 barthan match将不起作用。因此,它更适合使用re.search


1
据我了解的问题,OP实际上想要search而不是match。(请参阅docs.python.org/library/re.html#matching-vs-searching。)另外,我认为,如果以正确的顺序显示实际可能的参数,而不是仅仅显示,可能会有所帮助...
ruakh 2012年

1
如果更改st"foo bar",则match方法将在此处不起作用。您要搜索。
bukzor 2012年

@ruakh链接不再自动滚动到文档的该部分,现在链接为docs.python.org/2/library/re.html#search-vs-match
freeforall tousez 2014年

@RanRag使用in和搜索子字符串的复杂度有何不同regex
Piyush S. Wanare

1

这是一个执行您想要的功能的函数:

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

0

您可以执行以下操作:

如果搜索与您的搜索字符串匹配,则使用搜索将返回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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.