파이썬 정규식은 참 / 거짓을 반환합니다


114

파이썬 정규식을 사용하여 어떻게 True/를 False반환 할 수 있습니까? 모든 Python 반환은 다음과 같습니다.

<_sre.SRE_Match object at ...>

답변:


140

Match개체는 항상 true이며 None일치하는 항목이 없으면 반환됩니다. 진실성을 테스트하십시오.

if re.match(...):

21
re.match (...)는 문자열의 시작 부분이 일반 패턴과 일치하면 true를 반환합니다. 검색은 문자열의 어느 곳에서나 패턴을 확인합니다.
유 셴

8
if re.match(...) is None:대신 사용 하는 것이 더 바람직 할 수 있습니다.
NuclearPeon

죄송합니다. 답변에 댓글을 달았습니까? 나에게는 불분명합니다. 명확히 해주시겠습니까?
Charlie Parker

2
왜 이렇게 re 디자인 되었는지 물어봐도 될까요? 경우 match객체는 항상 해당, 이유는 반환하지 않습니다 True우리는 항상 대답은 참 또는 거짓 어쨌든인지를 알 필요가 주어진 첫 번째 장소에서?
ytu

1
@ytu : 그러면 필요한 모든 것을 할 수 있기 때문 입니다.
Ignacio Vazquez-Abrams

149

정말로 필요하다면 True또는을 False사용하십시오.bool

>>> bool(re.search("hi", "abcdefghijkl"))
True
>>> bool(re.search("hi", "abcdefgijkl"))
False

다른 답변에서 지적했듯이 if또는에 대한 조건으로 while사용하는 경우 포장하지 않고 직접 사용할 수 있습니다.bool()


1
bool조건문에 부울 산술 연산이 포함 된 경우 값이 필요합니다. 예 : if (re.search ( "a", "abc") & True) :
Aizzat Suhardi 2015-06-24

2
@AizzatSuhardi &비트 연산입니다. 부울 연산 and이 될 것 입니다.
John La Rooy 2015

1
감사합니다 @JohnLaRooy. 수정 :(re.search("a","abc") and True)
Aizzat Suhardi

이그나시오의 대답과 어떻게 다른가요?
찰리 파커 (Charlie Parker)

2
래핑 bool하면 프로그래머의 의도가 독자에게 명확 해집니다.
Guilherme Salomé 2018 년

10

Ignacio Vazquez-Abrams가 맞습니다. 그러나 자세히 설명하기 위해 re.match()는로 None평가되는 False, 또는 True그가 말한대로 항상 일치하는 개체 를 반환합니다 . 정규식과 일치하는 부분에 대한 정보를 원하는 경우에만 일치 개체의 내용을 확인해야합니다.


6

이를 수행하는 한 가지 방법은 반환 값에 대해 테스트하는 것입니다. 당신이 <_sre.SRE_Match object at ...>그것을 얻고 있기 때문에 이것이 사실로 평가된다는 것을 의미합니다. 정규식이 일치하지 않으면 반환 값 None이 반환되며 이는 false로 평가됩니다.

import re

if re.search("c", "abcdef"):
    print "hi"

생성 hi출력한다.


당신은 항상 반환 값을 얻을; None아무것도 명시 적으로 반환되지 않으면 기본값입니다.
Ignacio Vazquez-Abrams 2011

감사합니다. 수정했습니다. 나는 REPL에서 본대로 가고 있었다.
Gavin Anderegg 2011

4

내 방법은 다음과 같습니다.

import re
# Compile
p = re.compile(r'hi')
# Match and print
print bool(p.match("abcdefghijkl"))

1
p = re.comp il e (r'hi ') :-P
Clay

예, "False"를 반환합니다.
Ufos

로 변경 match하면 searchTrue를 반환합니다
alofgran

1

당신은 사용할 수 있습니다 re.match()또는 re.search(). 파이썬은 정규 표현식을 기반으로 두 가지 다른 기본 연산을 제공 re.match()합니다. 문자열의 시작 부분에서만 일치 re.search()여부를 확인하고 문자열의 어느 위치에서나 일치하는지 확인합니다 (기본적으로 Perl이 수행하는 작업입니다). 이것을 참조 하십시오

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