说我有以下文字:
“我想要一只粉红色的香蕉给我的狗”
我有一个单词列表及其定义。例如:
“粉红色香蕉”:“这是一种奇怪的香蕉”“香蕉”:“这是一种水果”
我想用类似以下的内容替换句子中匹配的单词:
<span tooltip="whatever">word</span>
我可以做到,但是问题是在我的示例中,第一个单词将被正确替换:
"I want a <span tooltip="whatever">pink banana</span> for my dog"
但是第二句话会造成不良行为:
"I want a <span tooltip="whatever">pink <span tooltip="whatever">banana</span></span> for my dog"
这在香蕉一词上产生了两个我不想要的工具提示。基本上,我想用一个正则表达式修改用于替换单词(“ \ b(WORD)\ b”)的正则表达式,该正则表达式仅在单词不在{<span tooltip="(.*)"></span>
“内时替换该单词。
这可能吗?
编辑
这是我用来遍历项目并替换单词的代码:
foreach (var glossaryItem in items)
{
textNode.InnerHtml = Regex.Replace(textNode.InnerHtml, $@"\b({glossaryItem.Name})\b", $"<span tooltip=\"{glossaryItem.Definition}\">$1</span>", RegexOptions.IgnoreCase);
}
答案 0 :(得分:2)
您可以尝试用负的超前子表达式//PHP code
$data['results'] = array("James", "Peter");
echo json_encode($data);
(或满足您需求的类似内容)替换正则表达式。
例如:
(?!...)
只有当foreach (var glossaryItem in items)
{
textNode.InnerHtml = Regex.Replace(textNode.InnerHtml, $@"\b(?<!"">)({glossaryItem.Name})(?!<\/span>)\b", $"<span tooltip=\"{glossaryItem.Definition}\">$1</span>", RegexOptions.IgnoreCase);
}
当前不在比赛开始并且">
当前不在比赛结束时,这基本上可以使您匹配字符串。