正则表达式匹配评估器不适用于包含"_"下划线的单词



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

var resultArray = new List {"new", "new_"}; // notice the word with underscore

但是当我试着像这样搜索一个句子时:
新Law_Book_with_New_Cover
它与第一个单词"New"匹配,但与中间的单词"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);
    }

是的,我确实尝试过转义"New_"这个词,但仍然没有运气。我错过了什么?

似乎只有当你的项目没有被字母包围时,你才需要匹配它们。

你可以用遍历替换正则表达式中的单词边界:

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

其中p{L}匹配任何字母,(?<!p{L})要求匹配前没有字母,(?!p{L})不允许匹配后有字母。

最新更新