【发布时间】:2020-12-03 13:21:40
【问题描述】:
目标
将后续的强元素和强调元素组合成一个元素。取以下字符串:
This is a <strong>test</strong><strong>string</strong>.
我需要做的是用一个标签替换两个强标签。上面应该变成:
This is a <strong>teststring</strong>.
到目前为止,我有以下正则表达式可以实现这个目标:
(?<values>(\<(?<tag>emphasis|strong)\>([^\<]+)\<\/\k<tag>\>){2,}?)
问题
获取以下测试字符串:
This is <emphasis>a</emphasis><strong>b</strong>.
它将第一个强调标签与最后一个强标签匹配。然而,这不是期望的行为。我需要的是正则表达式匹配强或强调,然后反向引用(\k<tag>)匹配相同的元素(强或强调)。上面的示例将导致匹配,但它不应该因为强调和强标签都没有重复。
解决此问题的一种方法是首先运行一个仅表示强的表达式,然后运行另一个仅表示强调的表达式。但是,这将导致更多的维护、额外的测试等,因此是不可取的。
感谢您提供的任何帮助。
【问题讨论】:
标签: regex html-parsing