-3

テキスト ファイルを 1 行ずつ読み取り、各行の一部を抽出する必要があります。私が読んでいる行が期待される形式である場合、私は機能するコードを持っていますが、これは常にそうであるとは限りません. ファイルにエラーがあります。つまり、情報や文字が欠落しています。したがって、これらの障害のある行をスキップしたいと思います。このために、regular expressionモジュールを利用したいと思います。必要な正規表現を定義しました。私reg_exp_stringが読んだ行と一致するとしましょう。完全一致が必要ですが、テキストの一部を検索したくありません。完全一致の場合は true を返し、それ以外の場合は false を返します。考えてみると、私は試しましたre.match()オブジェクトを返します。私はそれを理解できませんでした。それを使用する正しい方法は何ですか?文字列の一部が正規表現と一致する場合、常にオブジェクトを返します。完全一致のみが必要で、ブール値の回答が得られます。これどうやってするの?

4

4 に答える 4

1

ドキュメントに記載されているように$、文字列の末尾に一致します。最後に含めるように正規表現を変更できます$。例:

match_this = "abc12a" #expression you would like to match
dont_match_this = "abc12a9" #expression that returns partial matches from re.match

古い正規表現は、 と の両方に一致match_thisdont_match_thisます。

old_reg_expr = "[a-z]+\d[a-z]+"

新しい正規表現には$、式で一致した最後の要素の後に文字列が終了する場合にのみ一致が含まれ、返されます。

new_reg_expr = "[a-z]+\d[a-z]+$"

または、古い正規表現をそのままにして、一致の終了位置が文字列の末尾と等しいかどうかを確認することもできます。

>>> m = re.match("[a-z]+\d[a-z]+", "abc12a9")
>>> m.end() == m.endpos
False
于 2012-05-17T00:37:11.543 に答える
1

マッチ オブジェクトのドキュメントは、もう少し下にあります。

于 2012-05-16T23:42:24.147 に答える
-1

http://docs.python.org/library/re.htmlに記載されているように、 match() は、一致が見つかった場合に MatchObject を返し、それ以外の場合は None を返します。

したがって、次のように簡単に言います。

for line in ... :
    m = your_regexp.match(line)
    if m:
        process(line)
于 2012-05-16T23:44:09.790 に答える
-1

re.match()一致がない場合を除き、一致オブジェクトを返す必要があります。一致しない場合は次を返しますNone

http://docs.python.org/library/re.html#re.match

于 2012-05-16T23:42:31.953 に答える