2012-01-25 15 views
49

に含まれている場合にtrueを返します私はこのような正規表現を持っている:単語がバーバズまたは悪いが含まれている場合Pythonの再:正規表現は、文字列

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

関数はtrueを返す必要があります。要するに は、私はそれを実現することができますどのようにPythonの

'any-string' in 'text' 

のための正規表現のアナログが必要ですか?ありがとう!

+10

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

返しちょうど ''ブール(re.search( 'BA [RZD]'、「sometextを使用しています')) ''。 –

答えて

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

私は、正確な文字列( 'xyz')を検索し、これを行うためのより効率的な方法を知りたがっている同様の場合に取り組んでいます。pythonの' 'xyz 'をgiven_text'で使うか、 re.compile(r'xyz ')。検索(given_text) '? – bawejakunal

+1

'[]'角括弧には文字クラスが含まれているので、あなたもまた一致します:>>> word = 'ba |'; regexp.search(word) <_sre.SRE_Matchオブジェクト(0x101030b28)>。すべてのパイプシンボルを削除することができます。 – radtek

10

Matchオブジェクトは常に真であり、一致するものがなければNoneが返されます。真理をテストするだけです。

コード:

>>> st = 'bar' 
>>> m = re.match(r"ba[r|z|d]",st) 
>>> if m: 
...  m.group(0) 
... 
'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よりもマッチした場合には動作しません。だから、そのより適切なre.searchを使用する。

それは検索文字列に一致する場合、SRE_matchオブジェクトを返します検索を使用する:

+1

私は質問を理解するので、OPは実際には 'match'ではなく' search'を望んでいます。 (http://docs.python.org/library/re.html#matching-vs-searchingを参照してください。)また、実際の可能な引数を '...'ではなく正しい順序で示しておけば助けになると思います。 – ruakh

+1

'st'を' 'foo bar ''に変更すると、ここではマッチメソッドは機能しません。あなたは検索したい。 – bukzor

+0

@bukzor:あなたはそうです、私はその部分を見逃しました。 – RanRag

0

あなたはこのような何かを行うことができます。

>>> 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 
0

ここで何をしたいん機能だ:

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 
50

これまでで最高の1が

+1

それは最高のものです。 – shaashwato