2

Pythonの正規表現操作に疑問があります。ほら、私のサンプルテストに行きましょう。

>>>re.match(r'(\w+)','a-b') gives an output
>>> <_sre.SRE_Match object at 0x7f51c0033210>

>>>re.match(r'(\w+):(\d+)','a-b:1')
>>> 

特殊文字が文字列で使用可能であるにもかかわらず、最初の正規表現が通常の文字列一致条件の一致オブジェクトを与えるのに、2 番目の正規表現条件が一致オブジェクトを与えないのはなぜですか?

ただし、\w+ は [az,AZ,_] に一致します。(\w+) が文字列 'ab' に一致するオブジェクトを与える理由は明確ではありません。指定された文字列に特殊文字が含まれていないかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

6
于 2013-10-25T12:44:04.730 に答える
2

a1 つ目は- 1 つ以上の単語文字に一致します。

2 番目は、1 つ以上の単語の文字の直後に、存在しない文字が続き:ます...

[a-z,A-Z,_]( に相当する\w) は、aからzおよびAからZを意味します。これは、このコンテキストではリテラルのハイフンではありません。ハイフンが必要な場合は、文字クラスの最初または最後の文字として配置してください。

于 2013-10-25T12:17:50.523 に答える
1

マッチのドキュメントによると

文字列の先頭にある 0 個以上の文字が正規表現パターンと一致する場合、対応する MatchObject インスタンスを返します。

match文字列の先頭で一致が見つかった場合、メソッドは一致したオブジェクトを返します。(\w+)に一致aa-bます。

print re.match(r'(\w+)','a-b').group()

印刷します

a

2 番目のケース ( (\w+):(\d+)) では、一致する実際の文字列はb:1であり、文字列の先頭にはありません。それが戻ってくる理由Noneです。

指定された文字列に特殊文字が含まれていないかどうかを確認するにはどうすればよいですか?

あなたが使用した2番目の正規表現で十分であり、match関数で十分であると思います。とhttp://docs.python.org/2.7/library/re.html#search-vs-matchmatchの間に違いがあるため、私は主張しますmatchsearch

あなたを覚えている

于 2013-10-25T12:45:57.877 に答える