1

私は通常、Pythonと正規表現で問題ないので、ここで非常に初歩的なことが欠けていると確信しています。提供された文字列に少なくとも1つの数字が含まれているかどうかを確認しています。これは私が行っているコマンドラインですが、常にfalseになります...

>>> import re
>>> test_string = "123567890"
>>> pat = re.compile("[0-9]")
>>> pat.search(test_string) == True
False

これを投稿する前に、他のいくつかの順列を試しましたが、あまりうまくいきませんでした。何が間違っていますか?

4

4 に答える 4

4

pat.searchブール値ではなくMatchObjectを返すため、比較は失敗します。

In [9]: p = pat.search(test_string)

In [10]: p
Out[10]: <_sre.SRE_Match at 0x3cfa608>

In [11]: type(p)
Out[11]: _sre.SRE_Match

re.searchドキュメントを参照してください。

re.search(パターン、文字列、フラグ = 0)

文字列をスキャンして、正規表現パターンが一致する場所を探し、対応する MatchObject インスタンスを返します。パターンに一致する文字列の位置がない場合は None を返します。これは、文字列のあるポイントで長さがゼロの一致を見つけることとは異なることに注意してください。

于 2012-06-30T23:16:33.663 に答える
0

問題は、re.search()メソッドが実際には を返さずbool、特殊な正規表現を返すことです。一致オブジェクトbool(pat.search(test_string))を返す必要がTrueあります。つまり:

>>> import re
>>> test_string = "123567890"
>>> pat = re.compile("[0-9]")
>>> bool(pat.search(test_string))
True

一致が成功したかどうかをチェックする通常の方法は、単純にif構文を使用することです。つまり、次のようになります。

>>> if pat.search(test_string): True
... 
True

__nonzero__または __len__特殊なメソッドのいずれかを実装する任意のオブジェクトに対して、この省略形の真偽テストを使用できます。

于 2012-06-30T23:17:39.393 に答える
0

re.searchは、ブール値ではなく、一致が見つかったときにMatchObjectを返します。一致しない場合は None を返すため、これはあなたがやろうとしていることを行います:

pat.search(test_string)!=None
于 2012-06-30T23:18:44.807 に答える
0

一致オブジェクトの使用方法は次のとおりです。私は通常、一致オブジェクトからTrue/よりも多くのものが必要なので、常にそれを保存します。False

>>> m = pat.search(test_string)
>>> bool(m) == True
True
>>> if m:
        print "true"
true
于 2012-06-30T23:19:29.213 に答える