我正在用ASP.NET写一个Web应用程序。我需要正则表达式的帮助。我需要两个表达式,第一个可以帮助我获取并最终将HTML标记中的每个双引号字符替换为单引号,第二个可以获取并替换不属于HTML标记的每个双引号"
。
例如:<p>This is a "wonderful long text". "Another wonderful ong text"</p> At least it should be. Here we have a <a href="http://wwww.site-to-nowhere.com" target="_blank">link</a>
应该这样改。<p>This is a "wonderful long text". "Another wonderful ong text"</p> At least it should be. Here we have a <a href='http://wwww.site-to-nowhere.com' target='_blank'>link</a>
我尝试了以下表达式:
"([^<>]*?)"(?=[^>]+?<)
但问题是它不能捕获"Another wonderful ong text"
,可能是因为它紧挨着</p>
标记。
你能帮我解决这个问题吗?或者是否有其他解决方案来解决.NET中的这个替换问题?
4条答案
按热度按时间vmjh9lq91#
不要使用正则表达式来解析HTML。我可以推荐
HtmlAgilityPack
:我已经用你的示例HTML测试过了,这是(期望的)结果:
busg9geu2#
我会这么做
但是,有必要使用第一个正则表达式吗?第二个应该能很好地完成工作,而不去管双引号标记属性。正如smimov所说,一旦你的报价的一面被替换,你可以只做一个通用的替换其余的。我只提供了两个正则表达式,因为您可能会发现第一个甚至不必要。
此外,正如Ridgerunner的评论所指出的
不是一个琐碎的任务,以可靠地做。例如,您需要处理如下标记:
<p title="Can't put this in single quotes!">..</p>
。(注意双引号属性值中的单引号。)这是一个非常有效的观点。如果你在这里不需要单引号,坦白地说,我不会使用它们。
有很多例子你不想使用正则表达式来解析html,但这是一个非常非常简单的例子,我认为在这里使用正则表达式没有什么错。这与“在括号外寻找逗号”没有什么不同,后者会看到过多的答案。
但是,是的,确实,在regex中进行更复杂的html模式匹配是一项非常困难/几乎不可能完成的任务,这也是导致18-$max(myage,50)手动拔毛脱发的主要原因。
mum43rcc3#
你可以的
1.替换标记内的引号
1.替换所有剩余的引号
示例
演示:https://dotnetfiddle.net/5qkXaE
6xfqseft4#
虽然这不再相关,但这个选项在所问的问题上是可能的(例如,在PHP> 5.2的实现中):
HTML代码示例。
您将收到您的“奇怪”HTML代码: