我正在尝试匹配和格式化输出正则表达式结果。我有一个单词数组,例如:
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})
不允许匹配后有字母。