【发布时间】:2011-05-17 19:58:09
【问题描述】:
我知道使用正则表达式来解析或操作 HTML/XML 是一个坏主意,而且我通常不会这样做。但考虑它是因为缺乏替代品。
我需要使用 C# 替换尚未成为标记(理想情况下是具有特定 id 的跨度标记)一部分的字符串中的文本。
例如,假设我想将以下文本中不在跨度内的所有 ABC 实例替换为替代文本(在我的情况下是另一个跨度)
ABC at start of line or ABC here must be replaced but, <span id="__publishingReusableFragment" >ABC inside span must not be replaced with anything. Another ABC here </span> this ABC must also be replaced
我尝试将正则表达式与前瞻和后瞻断言一起使用。沿线的各种组合
string regexPattern = "(?<!id=\"__publishingReusableFragment\").*?" + stringToMatch + ".*?(?!span)";
但放弃了。
我尝试将其加载到 XElement 中,并尝试从那里创建编写器并获取不在节点内的文本。但也想不通。
XElement xel = XElement.Parse("<payload>" + inputString + @"</payload>");
XmlWriter requiredWriter = xel.CreateWriter();
我希望以某种方式使用编写器来获取不属于节点的字符串并替换它们。
基本上,我愿意接受任何解决此问题的建议/解决方案。
提前感谢您的帮助。
【问题讨论】:
标签: c# regex html-parsing xml-parsing regex-negation