Regex MatchEvaluator不能使用包含" _"下划线

时间:2016-08-23 11:23:08

标签: c# .net regex

我正在尝试匹配并格式化输出正则表达式结果。我有一个单词数组,例如:

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; 这个词,但仍然没有运气。 我错过了什么?

1 个答案:

答案 0 :(得分:0)

似乎只有在没有字母的情况下才需要匹配您的商品。

您可以使用外观替换正则表达式中的单词边界:

string regex = @"(?<!\p{L})(?:" + String.Join("|", resultArray.ToArray()) + @")(?!\p{L})";

\p{L}匹配任何字母,(?<!\p{L})要求在匹配前没有字母,(?!\p{L})在比赛结束后不允许使用字母。