2016-08-31 7 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: «Value» номенклатура и она работает прекрасно, используя выше регулярного выражения и метода. Теперь мой клиент изменил номенклатуру от NewListName: «Value» до «NewListName: Value». Я хочу захватить текст между двойными кавычками вместе с ключевым словом New:. Поэтому мне нужно искать «Новые ключевые слова» и «Конец цитаты». Может ли кто-нибудь помочь мне изменить указанное выше регулярное выражение для сканирования через тело электронной почты и получить весь список значений между двойными кавычками. Поэтому в приведенном выше примере я хочу получить «NewFinancial History: pqr \» в моих результатах. Любая помощь будет оценена по достоинству.

+1

Попробуйте 'ключей вара = Regex.Matches (emailBody, @ "" "Новый [^" ":] +: [^" "] +" "", RegexOptions .Selectline) .OfType () .Выберите (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 или больше символов, кроме " и :[^...] является инвертированный характер класса)
  • : - буквальная толстая кишка
  • [^"]+ - 1 или более символов, кроме "
  • " - буквальные двойные кавычки
+1

Большое спасибо. Вы были на месте. Цените помощь. –