Regex从表单结果返回值
本文关键字:返回值 结果 表单 Regex | 更新日期: 2023-09-27 17:58:07
web表单的结果通过文本邮件发送给我,我需要解析其中的所有值。我想要一个能够为给定键返回结果的正则表达式。
String Pattern = String.Format("^.*{0}:'s*(?<mail><mailto':)?(.*)(?(mail)>)'s*$", InputString);
我启用了这两个选项:RegexOptions.IgnoreCase | RegexOptions.Multiline
以下是需要解析的部分文本
City: Test City
Country: Mycountry
Phone: 212
Fax:
E-Mail: <mailto:mymail@example.com>
除了没有值的情况(例如Fax
)外,这种方法运行良好。如果我将Fax
作为InputString,则返回完整的下一行E-Mail: <mailto:mymail@example.com>
。我希望要么没有结果,要么一个空结果。
您的问题是,即使您没有使用RegexOptions.SingleLine
,因此.
与'n
不匹配,'s
字符类也与'n
匹配。
您可以通过用[^'S'r'n]
替换's
的每个实例来解决此问题,即不匹配"空白(包括换行符)",而匹配"not(非空白或换行符)。
string pattern = String.Format(
@"^[^'S'r'n]*{0}:[^'S'r'n]*(?<mail><mailto':)?(.*)(?(mail)>)[^'S'r'n]*$",
"Fax");
然而,接下来你会遇到另一个问题:RegexOptions.Multiline
意味着^
或$
与'n
匹配,所以如果你的比赛中的换行符是'r'n
,那么你的比赛将留下一个尾随的'r
。
为了解决这个问题,您可以不使用RegexOptions.Multiline
,而是用(?<=^|'r'n)
替换^
,用(?=$|'r'n)
替换$
,后者手动匹配'r'n
换行符。
这里有一个模式和代码,用于将项目放入字典中进行提取。如果该值为空,则其键在字典中是有效的,但为该ke包含或返回的值为null。
string data = @"City: Test City
Country: Mycountry
Phone: 212
Fax:
E-Mail: <mailto:mymail@example.com>";
string pattern = @"^(?<Key>[^:]+)(?::)(?<Value>.*)";
var resultDictionary =
Regex.Matches(data, pattern, RegexOptions.Multiline)
.OfType<Match>()
.ToDictionary (mt => mt.Groups["Key"].Value, mt => mt.Groups["Value"].Value);
/* resultDictionary is a dictionary with these values:
City Test City
Country Mycountry
Phone 212
Fax
E-Mail <mailto:mymail@example.com>
*/