问题:python的re:如果字符串包含正则表达式模式,则返回True
我有一个这样的正则表达式:
regexp = u'ba[r|z|d]'
如果单词包含bar,baz或bad,则函数必须返回True 。简而言之,我需要python的regexp模拟
'any-string' in 'text'
我怎么知道呢?谢谢!
I have a regular expression like this:
regexp = u'ba[r|z|d]'
Function must return True if word contains bar, baz or bad.
In short, I need regexp analog for Python’s
'any-string' in 'text'
How can I realize it? Thanks!
回答 0
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
回答 1
到目前为止最好的是
bool(re.search('ba[rzd]', 'foobarrrr'))
返回真
The best one by far is
bool(re.search('ba[rzd]', 'foobarrrr'))
Returns True
回答 2
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
。
Match
objects are always true, and None
is returned if there is no match. Just test for trueness.
Code:
>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
...
'bar'
Output = bar
If you want search
functionality
>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
... m.group(0)
...
'bar'
and if regexp
not found than
>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
... else:
... print "no match"
...
no match
As @bukzor mentioned if st = foo bar
than match will not work. So, its more appropriate to use re.search
.
回答 3
这是一个执行您想要的功能的函数:
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
Here’s a function that does what you want:
import re
def is_match(regex, text):
pattern = re.compile(regex, text)
return pattern.search(text) is not None
The regular expression search method returns an object on success and None if the pattern is not found in the string. With that in mind, we return True as long as the search gives us something back.
Examples:
>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
回答 4
您可以执行以下操作:
如果搜索与您的搜索字符串匹配,则使用搜索将返回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
You can do something like this:
Using search will return a SRE_match object, if it matches your search string.
>>> 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()
If not, it will return None
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
n.group()
AttributeError: 'NoneType' object has no attribute 'group'
And just to print it to demonstrate again:
>>> print n
None