파이썬의 re : 문자열에 정규식 패턴이 포함 된 경우 True 반환


98

다음과 같은 정규식이 있습니다.

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

단어에 bar , baz 또는 bad 가 포함 된 경우 함수는 True를 반환해야합니다 . 요컨대, 파이썬의 정규 표현식 아날로그가 필요합니다.

'any-string' in 'text'

어떻게 알 수 있습니까? 감사!


17
사용하십시오 bool(re.search('ba[rzd]', 'sometext')).
Raymond Hettinger 2012 년

답변:


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

1
나는 정확한 문자열 ( xyz) 을 검색 하고 이것을 수행하는 더 효율적인 방법을 알고 싶은 비슷한 경우를 작업 중입니다. 파이썬을 'xyz' in given_text사용하거나 사용해야 re.compile(r'xyz').search(given_text)합니까?
bawejakunal

1
[]재도 일치하도록 대괄호는 문자 클래스를 포함 : >>> 워드 = '바 |'; regexp.search (word) <_sre.SRE_Match object at 0x101030b28>. 모든 파이프 기호를 삭제할 수 있습니다.
radtek

104

지금까지 가장 좋은 것은

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

True 반환


2
이것이 다른 솔루션보다 나은 이유는 무엇입니까?
kres0345

1
한 가지로, bool. OP : " True단어에 bar, baz 또는 bad가 포함 된 경우 반환해야합니다 ." 다른 답변은 if-자동 변환 식을 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. 내가 찾을 수있는 자동 변환 문서에 가장
가깝습니다

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
내가 질문을 이해로서, 영업 이익은 실제로 원하는 search것이 아니라 match. ( docs.python.org/library/re.html#matching-vs-searching을 참조 하세요. ) 또한 실제 가능한 인수를 ....
ruakh

1
로 변경 st하면 "foo bar"여기에서 일치 방법이 작동하지 않습니다. 당신은 검색을 원합니다.
bukzor

@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()

그렇지 않은 경우 None을 반환합니다.

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    n.group()
AttributeError: 'NoneType' object has no attribute 'group'

다시 시연하기 위해 인쇄하십시오.

>>> print n
None
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.