2017-07-13 12 views
0

これで、C#の電子メールヘッダーからさまざまな部分を抽出しようとしています。私はRegexにとっては絶望的だと思う。C#Regexを使った電子メールヘッダーからの抽出

[["X-Mailgun-Incoming", "Yes"], ["X-Envelope-From", "<[email protected]>"],["Thread-Topic", "What is status"]]

私は私がしようとしているスレッド・トピック

言いたい正規表現を使用して::

[\"(Thread)\-(Topic)\", (\")?:[A-Z][a-z][a-z]+(\")]

理想的同上だけに似

私には、以下の持っています他のパラメータの一部を抽出するように単語を変更してください

+1

がどのようにそのフォーマットを取得していますか?生のメールにアクセスできますか?もしそうなら、はるかに簡単で、電子メール処理ライブラリを使用して情報を抽出するのがより簡単です。 – Rob

+0

ありがとう。しかし、私たちは電子メールパーザを構築しています – user1112324

答えて

0

私のようなものだろう正規表現場合は、生の文字列

var str = "[[\"X-Mailgun-Incoming\",\"Yes\"],[\"X-Envelope-From\",\"<[email protected]>\"],[\"Thread-Topic\",\"What is status\"]]"; 
var arr = str.Split(new string[] { "],[", "[[", "]]" }, StringSplitOptions.RemoveEmptyEntries); 
var kpv = arr.Select(x => x.Split(new char[] { ',', '"' }, StringSplitOptions.RemoveEmptyEntries)).ToArray(); 
+0

申し訳ありませんが、私は正規表現が必要です – user1112324

+0

質問では –

+1

と言ってください。やった? "正規表現を使う" .... – user1112324

0

を取得すると仮定:

[TestMethod] 
public void ParseHeadersToDictionary_MultipleHeaders_HeadersAreParsed() 
{ 
    var emailHeaders = "[[\"X-Mailgun-Incoming\",\"Yes\"],[\"X-Envelope-From\",\"<[email protected]>\"],[\"Thread-Topic\",\"What is status\"]]"; 

    var regex = new Regex(@"\[""(?<key>.*?)"",\s?""(?<value>.*?)""]"); 
    Dictionary<string,string> headers = regex.Matches(emailHeaders).Cast<Match>().ToDictionary(item => item.Groups["key"].Value, item => item.Groups["value"].Value); 

    var result = headers["Thread-Topic"]; 

    Assert.AreEqual("What is status", result); 
} 
関連する問題