我正在尝试在电子邮件中找到未使用的合并字段,并抛出解析器不支持的字段。格式为[MERGEFIELD]。括号内的所有大写字母。
我然后想要在文本中抛出第一个不受支持的合并字段的值。
if (Regex.IsMatch(email.Body, @"\[[A-Z]+\]"))
{
var regexobj = new Regex(@"\[[A-Z]+\]");
var regexBody = regexobj.Match(email.Body).Groups[1].Value;
throw new NotImplementedException("Unsupported Merge Field:"+ regexBody );
}
现在我得到了异常,但只有消息是“Unsupported Merge Field:”
答案 0 :(得分:2)
您正试图获取(捕获)第1组(括号中的匹配内容)的值,这在您的表达式中不存在。
也许您想要使用这样的表达式:
\[([A-Z]+)\]
答案 1 :(得分:0)
您需要使用括号才能捕获。
http://www.regular-expressions.info/refadv.html
另见http://msdn.microsoft.com/en-us/library/az24scfc.aspx
我喜欢使用格式为的命名捕获组 (?< name>子表达式),它允许您按名称而不是索引访问捕获。
类似下面的内容(手工编码)
if (Regex.IsMatch(email.Body, @"\[[A-Z]+\]"))
{
var regexobj = new Regex(@"(?<unsupportedField>\[[A-Z]+\])");
foreach(Match match in regexobj.Matches(email.Body))
{
string unsupported = match.Groups["unsupportedField"].Value
//aggregate these then throw
}
throw new NotImplementedException("Unsupported Merge Field:"+ regexBody );
}