2011-11-11 14 views
0

私はいくつかのCRMシステムから電子メールを受信するWebサービスを構築しています。メールには、通常、テキストステータスが含まれます。 「受信済み」または「完了済み」とフリーテキストコメント。テンプレートを使用してテキストからデータを抽出する

受信メールの形式が異なります。一部のシステムではステータス「Status:ZZZZZ」といくつかの「Action:ZZZZZ」が呼び出されます。フリーテキストは、時々、状態の前に現れ、何かの後に現れることがあります。ステータスコードは私のシステム解釈にマップされ、コメントも必要です。

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

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

私はRegExpの周りに頭を上げたことはありません。私はそれが確かに行く方法である場合に新しい努力をするでしょう。 :)

+0

具体的にしてください。あなたが試したコードを入力データ形式の例で表示し、あなたの期待することを質問に書いてください。いいえ...いいえ、私は答えます - RegExpを学んでください:) – Reniuz

答えて

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持っていた場合 - メッセージのように:

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)部分は、ユーザーが\?*などの特殊文字を提出することによって、あなたの正規表現を壊さないようにすることが重要である...


ユーザーは、形式のテキストの前または後にステータス値を送信する場合、あなたはいくつかのソリューションを持って知っている

  • あなたは彼のステータス値があることをユーザーに尋ね、その後、あなたはそれに応じてregexで構築することができ:

    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を送信し、タグ文字列を置き換えて正規表現を作成します。

+0

役に立つヒントを大変ありがとうございます!それは私にフライングスタートを与えるだろう!歓声 – Payaso

+0

複数の値を抽出する方法はありますか?例えばStatus:とActionsが同じメッセージ内にある場合 –

関連する問題