2016-08-31 1 views
1

は正規表現

string emailBody = "sample text for NewFinancial History:\"xyz\" text NewFinancial History:\"abc\" NewEBTDI$:\"abc\" ds \"NewFinancial History:pqr\" test"; 
 

 
private Dictionary<string, List<string>> ExtractFieldValuesForDynamicListObject(string emailBody) 
 
     { 
 
     Dictionary<string, List<string>> paramValueList = new Dictionary<string, List<string>>(); 
 
      try 
 
      { 
 
       emailBody = ReplaceIncompatableQuotes(emailBody); 
 
       emailBody = string.Join(" ", Regex.Split(emailBody.Trim(), @"(?:\r\n|\n|\r)")); 
 
       var keys = Regex.Matches(emailBody, @"\bNew\B(.+?):", RegexOptions.Singleline).OfType<Match>().Select(m => m.Groups[0].Value.Replace(":", "")).Distinct().ToArray(); 
 
       foreach (string key in keys) 
 
       { 
 
        List<string> valueList = new List<string>(); 
 
        string regex = "" + Regex.Escape(key) + ":" + "\"(?<" + Regex.Escape(GetCleanKey(key)) + ">[^\"]*)\""; 
 

 
        var matches = Regex.Matches(emailBody, regex, RegexOptions.Singleline); 
 
        foreach (Match match in matches) 
 
        { 
 
         if (match.Success) 
 
         { 
 
          string value = match.Groups[Regex.Escape(GetCleanKey(key))].Value; 
 
          if (!valueList.Contains(value.Trim())) 
 
          { 
 
           valueList.Add(value.Trim()); 
 
          } 
 
         } 
 
        } 
 
        valueList = valueList.Distinct().ToList(); 
 
        string listName = key.Replace("New", "");      
 
        paramValueList.Add(listName.Trim(), valueList); 
 
       } 
 
      } 
 
      catch (Exception ex) 
 
      { 
 
       DCULSLogger.LogError(ex); 
 
      } 
 
      return paramValueList; 
 
     }

を使用して二重引用符の間の値ここでの私の目標は、電子メールの本文かかわらずスキャンしNewListNameで文字列を特定することですを抽出します正規表現とメソッドの上に。今私のクライアントは、NewListName: "値"から "NewListName:値"に命名法を変更しました。私は二重引用符の間にあるテキストをNew:キーワードと共につかみたい。だから私は "新しいキーワードと"引用符を探す必要があります。誰も私は電子メールの本文をスキャンし、二重引用符の間の値のすべてのリストを取得する上記の正規表現を変更することができます。上記の例では、私の結果に\ "NewFinancial History:pqr \"をつけたいと思っています。どんな助けもありがとう。

+1

は 'VARキー= Regex.Matches(emailBody、@ "" "新しい[^" ":]試してみてください:RegexOptions、[^" "] +" "" + 。単一行).OfType ().Select(m => m.Value).Distinct()。ToArray(); ' –

+0

それは働いた。ありがとう!!!あなたは正規表現を説明していただけますか? –

+0

偉大な、以下の答えを確認してください、私は説明を掲載しました。 –

答えて

1

その後、引用、New":以外の文字、:、その後、任意の文字と一致しますが""までになる正規表現を使用することがあります。

var keys = Regex.Matches(emailBody, @"""New[^"":]+:[^""]+""", RegexOptions.Singleline) 
     .OfType<Match>() 
     .Select(m => m.Value) 
     .Distinct() 
     .ToArray(); 

regex demo

を参照してください。

enter image description here

パターンの詳細

  • " - リテラルの二重引用符
  • New - リテラルストリング
  • [^":]+ - ":以外の1文字以上([^...]否定文字クラスある)
  • : - リテラルコロン
  • [^"]+ - 012以外の1文字以上
  • " - リテラルの二重引用符
+1

ありがとうございました。ヘルプをよろしくお願いいたします。 –