質問: メッセージ(文章)をパターンに分類する機能(ライブラリ、ロジック)を探しています。 例えば、“こんにちは[$1]さん”というメッセージパターンを事前に登録しておきます。 そして、“こんにちは田中さん”が入力されたら、 それが“こんにちは[$1]さん”というメッセージパターンであり、[$1]は“田中”である、という判定をさせたいです。 この機能を他のシステムに組み込みたいため、 ライブラリとして呼び出せるようなソースコードorモジュールはあるでしょうか? 言語はExcelVBAだと嬉しいですが、他の言語でも情報が欲しいです。 よろしくお願いします。
回答: 完全な回答ではないが、参考に。 課題の一部を、WordVBAで処理したものです。 正規表現というものを、使おうとしています。 メイルメッセージの(多分本文だろうが)のテキストをワードの文書に貼り付ける(今回は手動で行う)。テストデータとして使います。 私の場合は「こんにちは田中さん」「こんにちは東野さん」の2文を、適宜の場所に挿入コピー貼り付けしました。またMsgboxは確認用です。本来不要。 ーー ワードのVBEの標準モジュールに Sub RegExpSample3() Dim regEx As Object, Matches As Object, Match As Object ActiveDocument.Range(0, 0).Select Selection.WholeStory Set regEx = CreateObject("VBScript.RegExp") txt = Selection.Text MsgBox txt With regEx .Pattern = "こんにちは..さん" ' パターンを設定します。 ワイルドカードの??は「..」です。2文字を挟むの意味。 .IgnoreCase = False ' 大文字と小文字を区別しないように設定します。 .Global = True ' 文字列全体を検索 End With Set Matches = regEx.Execute(txt) ' Executeメソッドで正規表現にマッチした箇所を取得できます 'MsgBox Matches.Item(0).Value '' → @hugafuga ,マッチしたものの一つ目の要素の値を出力。マッチするものがなければエラー MsgBox "該当Count: " & Matches.Count '' Countメソッドで値が取得できます。 For Each Match In Matches '' ForEachでMatches内の要素を出力できます。 msg = Match.Value MsgBox msg MsgBox Replace(Replace(msg, "こんにちは", ""), "さん", "") Next Match End Sub を貼り付け。(上記はWEB記事を一部修正したもの) 実行。 「鈴木」と「東野」が表示されると思う。 == メイル受信ソフトが何なのか質問以書いてない。マイクロソフト系のOutlookなどならOutlookVBAがあるので、上記を多少の修正で使えるかも。 ーー 名前が見つかった(「鈴木」と「東野」(「などの)後は、特定のフォルダーにでも移すなどのコードが必要だが、これはVBAの範疇でしょう。 Google系のものだと、JavaScriptで扱うところのVBA的なものがあるかもしれない。そこには正規表現が使える可能性は多い。 正規表現はUNIX系統のソフトが出自。 ーー ただし「Pattern=」のところのワイルドカードは、VBAと違い、「こんにちは*さん」や「こんにちは??さん」になると思うので、注意。このほうが本家筋の書き方。 後方参照の「For Each Match In Matches」以下は、VBScriptではできるが、その他の処理系では別の書き方になる可能性が多い。 == お勧め 上記のようにややこしいので (1)この目的に特化したフリーソフトを探すか (2)メイルソフトにメイル文の一部で、仕分けができるような機能がないか 勉強してください。