正規表現によるマッチング
【実現したいこと】
メールなどの改行、空白文字が含まれる本文から正規表現によるパターンマッチで特定の文字列を抽出、ないし特定の文字列が含まれるか判定。
(メール本文例)
拝啓 ○○の候 ますますご清栄のこととお喜び申し上げます
平素はひとかたならぬ御愛顧を賜り厚く御礼申し上げます
さて かねてよりの念願がかないまして
このたび レストラン「○○○○」を開店することになりました
上記のような文章で、「○○○○」を抜き出す、ないし「○○○○」が含まれているかどうかの判定を行いたいです
【質問】
「kompiraの正規表現はpythonの re モジュールの正規表現に準じています。」とのことですが、pythonでの改行や空白文字を含んだマッチングパターンを参考にコードを書いたところ、上手く動きません。
お知恵をお貸しいただけないでしょうか。
よろしくお願いします。
-
正式なコメント
フィックスポイント開発部の髙橋です。
以下のようなコードで、例のような改行を含むテキストから特定の文字列が含まれるかの判定ができます。
|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 でマッチ部分を参照できるようにしています。
参考になさってみてください。
以上、よろしくお願いいたします。
コメントアクション
サインインしてコメントを残してください。
コメント
1件のコメント