使用示例短语:
所有男人都喜欢小工具,但有些男人比其他人更喜欢小工具
该示例包含单词widgets的两种用法。我要做的是匹配外面的位。请注意,虽然 widgets 是一个词,但我正在寻找一种也适用于多个词的正则表达式解决方案。
给定上述示例,输出将包含 3 个匹配项:
所有男人都喜欢
但有些男人喜欢
比别人多
到目前为止,我有以下仅部分有效的正则表达式:
@"(?!widgets\b)\b\w+"
局限性在于它无法处理多个单词短语——它还匹配每个否定词,而不是匹配/succeed 之前的整个词串,所以“all”、“men”和“like”而不是“all men like” .
我有另一个解决方案,它涉及一个更简单的正则表达式和一些额外的 c# 代码斩波和更改,但这不是我满意的解决方案:
string EmboldenString(string text, string termToExclude)
{
var pattern = $@" ?{termToExclude} ?";
var tagStart = "<b>";
var tagEnd = "</b>";
var result = Regex.Replace($"{tagStart}{text}{tagEnd}", pattern, (match) =>
{
return $"{tagEnd}{match}{tagStart}";
});
var emptyTag = tagStart + tagEnd;
if (result.StartsWith(emptyTag))
result = result.TrimStart(emptyTag.ToCharArray());
if (result.EndsWith(emptyTag))
result = result.TrimEnd(emptyTag.ToCharArray());
return result;
}
从上面的代码可以看出,目标是为所有不匹配的位添加标签。
任何人都可以提供更好的正则表达式帮助。
九州编程
长风秋雁
相关分类