正規表現によるマッチング

コメント

1件のコメント

  • 正式なコメント
    Ichiro Takahashi

    フィックスポイント開発部の髙橋です。

    以下のようなコードで、例のような改行を含むテキストから特定の文字列が含まれるかの判定ができます。

    |pattern = r"(?s).*(○○○○)"|
    [text = """拝啓 ○○の候 ますますご清栄のこととお喜び申し上げます
    平素はひとかたならぬ御愛顧を賜り厚く御礼申し上げます
    さて かねてよりの念願がかないまして
    このたび レストラン「○○○○」を開店することになりました
    """] ->
    [m = pattern.match(text)] ->
    { if m |
    then:
    print("テキストがパターン($pattern)にマッチしました") ->
    print("マッチした部分は %groups です" % m)
    else:
    print("テキストがパターン($pattern)にマッチしません")
    }

    手元の kompira でこのジョブフローを実行すると以下のようになります。

    テキストがパターン(r"(?s).*(○○○○)")にマッチしました
    マッチした部分は ['○○○○'] です

    ここでのポイントとしては二つです。

    • パターンの先頭で (?s) と記述して、正規表現パターンに DOTALL モードを適用します。これにより続く特殊文字 '.' が改行にもマッチするようになります。
    • マッチした文字列の部分を抽出するために、(○○○○) と丸括弧で囲っています。これによりマッチ結果の groups でマッチ部分を参照できるようにしています。

    参考になさってみてください。

    以上、よろしくお願いいたします。

    コメントアクション Permalink

サインインしてコメントを残してください。