我正在尝试匹配并格式化输出正则表达式结果。我有一个单词数组,例如:
var resultArray = new List {"new", "new_"}; // notice the word with underscore
但是当我试图搜索这样的句子时:
New Law_Book_with_New_Cover
它与第一个单词" New"匹配但不是中间的"新_" 。这是我的代码
if (resultArray.Count > 0)
{
string regex = "\\b(?:" + String.Join("|", resultArray.ToArray()) + ")\\b";
MatchEvaluator myEvaluator = new MatchEvaluator(GetHighlightMarkup);
return Regex.Replace(result, regex, myEvaluator, RegexOptions.Compiled | RegexOptions.Multiline | RegexOptions.IgnoreCase);
}
private static string GetHighlightMarkup(Match m)
{
return string.Format("<span class=\"focus\">{0}</span>", m.Value);
}
是的,我确实试图逃避&#34; \ New _&#34; 这个词,但仍然没有运气。 我错过了什么?
答案 0 :(得分:0)
似乎只有在没有字母的情况下才需要匹配您的商品。
您可以使用外观替换正则表达式中的单词边界:
string regex = @"(?<!\p{L})(?:" + String.Join("|", resultArray.ToArray()) + @")(?!\p{L})";
\p{L}
匹配任何字母,(?<!\p{L})
要求在匹配前没有字母,(?!\p{L})
在比赛结束后不允许使用字母。