Python正規表現はtrue / falseを返します


114

Python正規表現を使用して、True/をFalse返すにはどうすればよいですか?すべてのPythonの戻り値は次のとおりです。

<_sre.SRE_Match object at ...>

回答:


140

Matchオブジェクトは常に真でありNone、一致しない場合に返されます。真実をテストするだけです。

if re.match(...):

21
re.match(...)は、文字列の先頭部分が通常のパターンに一致する場合にtrueを返します。検索中は、文字列の任意の場所でパターンを確認します。
Yu Shen

8
if re.match(...) is None:代わりに使用する方が望ましい場合があります
NuclearPeon 2017

申し訳ありませんが、回答のコメントに対処しましたか?それは私には不明確です、明確にしてもいいですか?
チャーリーパーカー

2
私が聞いても、なぜ reこのように設計されていますか?場合はmatch、オブジェクトは常に真である、なぜそれだけで戻りませんTrue、我々は常に答えが真か偽とにかくであるかを知っておく必要があることを考えると、最初の場所で?
ytu 2018年


148

Trueまたはが本当に必要な場合はFalsebool

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

他の回答が指摘しているように、単にiforの条件として使用している場合は、whileラップせずに直接使用できますbool()


1
bool条件ステートメントにブール算術演算が含まれている場合、値が必要です。例:if(re.search( "a"、 "abc")&True):
Aizzat Suhardi

2
@AizzatSuhardi &ビット単位の演算です。andだろうブーリアン演算。
John La Rooy、2015年

1
@JohnLaRooyに感謝します。訂正:(re.search("a","abc") and True)
Aizzat Suhardi 2015年

これはイグナシオの答えとどう違うのですか?
チャーリーパーカー

2
ラップインboolすると、プログラマーの意図が読者に明確になります。
ギルヘルメサロメ

10

Ignacio Vazquez-Abramsは正しいです。ただし、詳しく説明すると、re.match()None、に評価されるFalse、または常に一致する一致オブジェクトを返しますTrue。正規表現に一致した部分に関する情報が必要な場合のみ、一致オブジェクトの内容をチェックアウトする必要があります。


6

これを行う1つの方法は、戻り値に対してテストすることです。取得して<_sre.SRE_Match object at ...>いるため、これはtrueと評価されます。正規表現が一致しない場合、戻り値Noneが返され、評価はfalseになります。

import re

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

生成しhi出力として。


あなたは常に戻り値を取得します。None明示的に何も返されない場合のデフォルトです。
Ignacio Vazquez-Abrams

ありがとう-それを修正しました。私はREPLで見たものをそのまま使っていました。
Gavin Anderegg

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
クレイ

そう、それは「False」を返します
Ufos

に変更matchするとsearch、Trueが返されます
alofgran

1

re.match()またはを使用できますre.search()。Pythonは、正規表現に基づいて2つの異なるプリミティブ操作を提供します。re.match()文字列の先頭でのみ一致をre.search()チェックし、文字列の任意の場所で一致をチェックします(これはPerlがデフォルトで行うことです)。これを参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.