C# 使用正则表达式提取双引号之间的值 string emailBody=“新财务历史记录的示例文本:\“xyz\”文本新财务历史记录:\“abc\”新EBTDI$:\“abc\”ds\“新财务历史记录:pqr\”测试”; 私有字典ExtractFieldValuesfordDynamicListObject(字符串emailBody) { Dictionary paramValueList=新字典(); 尝试 { emailBody=ReplaceComplateQuotes(emailBody); emailBody=string.Join(“,Regex.Split(emailBody.Trim(),@”(?:\r\n| \n| \r)”); var keys=Regex.Matches(emailBody,@“\bNew\B(+?):”,RegexOptions.Singleline)。of type()。选择(m=>m.Groups[0]。Value.Replace(“:”,”“)。Distinct()。ToArray(); foreach(字符串键入键) { 列表值列表=新列表(); 字符串regex=“”+regex.Escape(key)+“:“+”\”(?[^\“]*)\”; var matches=Regex.matches(emailBody、Regex、RegexOptions.Singleline); foreach(匹配中的匹配) { 如果(匹配成功) { 字符串值=match.Groups[Regex.Escape(GetCleanKey(key))].value; 如果(!valueList.Contains(value.Trim())) { valueList.Add(value.Trim()); } } } valueList=valueList.Distinct().ToList(); string listName=key.Replace(“New”和“”); paramValueList.Add(listName.Trim(),valueList); } } 捕获(例外情况除外) { DCULSLogger.LogError(ex); } 返回参数值列表; }
我的目标是扫描电子邮件正文,并用C# 使用正则表达式提取双引号之间的值 string emailBody=“新财务历史记录的示例文本:\“xyz\”文本新财务历史记录:\“abc\”新EBTDI$:\“abc\”ds\“新财务历史记录:pqr\”测试”; 私有字典ExtractFieldValuesfordDynamicListObject(字符串emailBody) { Dictionary paramValueList=新字典(); 尝试 { emailBody=ReplaceComplateQuotes(emailBody); emailBody=string.Join(“,Regex.Split(emailBody.Trim(),@”(?:\r\n| \n| \r)”); var keys=Regex.Matches(emailBody,@“\bNew\B(+?):”,RegexOptions.Singleline)。of type()。选择(m=>m.Groups[0]。Value.Replace(“:”,”“)。Distinct()。ToArray(); foreach(字符串键入键) { 列表值列表=新列表(); 字符串regex=“”+regex.Escape(key)+“:“+”\”(?[^\“]*)\”; var matches=Regex.matches(emailBody、Regex、RegexOptions.Singleline); foreach(匹配中的匹配) { 如果(匹配成功) { 字符串值=match.Groups[Regex.Escape(GetCleanKey(key))].value; 如果(!valueList.Contains(value.Trim())) { valueList.Add(value.Trim()); } } } valueList=valueList.Distinct().ToList(); string listName=key.Replace(“New”和“”); paramValueList.Add(listName.Trim(),valueList); } } 捕获(例外情况除外) { DCULSLogger.LogError(ex); } 返回参数值列表; },c#,regex,C#,Regex,我的目标是扫描电子邮件正文,并用NewListName:“Value”命名法识别字符串,使用上述正则表达式和方法它工作得非常好。现在,我的客户已将命名法从NewListName:“Value”更改为“NewListName:Value”“。我想抓住双引号和New:关键字之间的文本。因此,我需要查找新的“关键字和结束引号。有人能帮我修改上面的正则表达式以扫描电子邮件正文并获取双引号之间的所有值列表吗?因此,在上面的示例中,我想抓取\“新财务历史记录:pqr?”\“在我的结果中。任何帮助都将不胜感激
NewListName:“Value”
命名法识别字符串,使用上述正则表达式和方法它工作得非常好。现在,我的客户已将命名法从NewListName:“Value”
更改为“NewListName:Value”“
。我想抓住双引号和New:
关键字之间的文本。因此,我需要查找新的“关键字和结束引号。有人能帮我修改上面的正则表达式以扫描电子邮件正文并获取双引号之间的所有值列表吗?因此,在上面的示例中,我想抓取\“新财务历史记录:pqr?”\“
在我的结果中。任何帮助都将不胜感激 您可以使用一个正则表达式,该正则表达式将匹配引号、New
、除和以外的一些字符:
,然后是:
,然后是除“
以外的任何字符,直到”
:
var keys=Regex.Matches(emailBody,@“New[^”“:]+:[^”“]+”,RegexOptions.Singleline)
第()类
.选择(m=>m.Value)
.Distinct()
.ToArray();
见
图案细节:
“
-文字双引号
New
-文字子字符串
[^]+
-1个或多个字符,而不是“
和:
([^…]
是一个否定字符类)
:
-文字冒号
[^”]+
-1个或多个字符,而不是“
“
-文字双引号
试试var-keys=Regex.Matches(emailBody,@“New[^”“:]+:[^”“]+”,RegexOptions.Singleline).OfType().Select(m=>m.Value).Distinct().ToArray();
奏效了。谢谢!!!你能解释一下Regex吗?太好了,请检查下面的答案,我发布了解释。非常感谢你。感谢你的帮助。
var keys = Regex.Matches(emailBody, @"""New[^"":]+:[^""]+""", RegexOptions.Singleline)
.OfType<Match>()
.Select(m => m.Value)
.Distinct()
.ToArray();