0

多数のCRMシステムから電子メールを受信するWebサービスを構築しています。電子メールには通常、「受信済み」や「完了」などのテキストステータスと、フリーテキストのコメントが含まれています。

受信メールの形式は異なります。たとえば、一部のシステムではステータスを「ステータス:ZZZZZ」と呼び、一部のシステムでは「アクション:ZZZZZ」と呼びます。フリーテキストは、ステータスの前と後の何かに表示されることがあります。ステータスコードは私のシステム解釈にマッピングされ、コメントも必要です。

さらに、フォーマットは時間の経過とともに変化するので、おそらく顧客がWebインターフェイスを介して独自のテンプレートを提供することによって構成可能なソリューションが理想的であると思います。

このサービスは.NETC#MVC 3を使用して構築されていますが、一般的な戦略だけでなく、特定のライブラリ/ツール/アプローチにも興味があります。

私はRegExpに頭を悩ませたことはありません。それが実際に進むべき道である場合に備えて、私は新たな努力をします。:)

4

1 に答える 1

1

私は正規表現で行きます:

最初の例、もしあなたがStatus: ZZZZZ-のようなメッセージしか持っていなかったら:

String status = Regex.Match(@"(?<=Status: ).*");
// Explanation of "(?<=Status: ).*" :
// (?<=       Start of the positive look-behind group: it means that the 
//            following text is required but won't appear in the returned string
// Status:    The text defining the email string format
// )          End of the positive look-behind group
// .*         Matches any character

Status: ZZZZZAction: ZZZZZ-のようなメッセージしかない場合の2番目の例:

String status = Regex.Match(@"(?<=(Status|Action): ).*");
// We added (Status|Action) that allows the positive look-behind text to be 
// either 'Status: ', or 'Action: '

ここで、ユーザーに独自の形式を提供する可能性を与えたい場合は、次のようなものを思い付くことができます。

String userEntry = GetUserEntry(); // Get the text submitted by the user
String userFormatText = Regex.Escape(userEntry);
String status = Regex.Match(@"(?<=" + userFormatText + ").*");

これにより、ユーザーは、、、、、などの形式を送信Status:できAction:ますThis is my friggin format, now please read the status -->

この部分は、ユーザーが、、、...などのRegex.Escape(userEntry)特殊文字を送信して正規表現を壊さないようにするために重要です。\?*


ユーザーがフォーマットテキストの前または後にステータス値を送信するかどうかを知るには、いくつかの解決策があります。

  • ユーザーにステータス値がどこにあるかを尋ねて、それに応じて正規表現を作成できます。

    if (statusValueIsAfter) {
        // Example: "Status: Closed"
        regexPattern = @"(?<=Status: ).*";
    } else {
        // Example: "Closed:Status"
        regexPattern = @".*(?=:Status)";  // We use here a positive look-AHEAD
    }
    
  • または、より賢く、ユーザーエントリにタグのシステムを導入することもできます。たとえば、ユーザーが送信するStatus: <value><value>=The status、タグ文字列を置き換えることで正規表現を作成します。

于 2011-11-11T12:29:15.947 に答える