我有一个XML文件,里面散落着一些分页符的处理指令。 很多时候 - 这些是重复的。 由于程序限制,我们不能有重复项。 解决方法是删除重复项。
从 XML 中提取
<cl:sect2 number="nonumber" identifier="c21_sect2-16">
<cl:complex-meta>
<cl:title identifier="NHBTUL192190904">title</cl:title>
</cl:complex-meta>
<cl:para identifier="YIGECN781336101">text in a para</cl:para>
<cl:para identifier="YIGECN781337102">text in a para</cl:para>
<cl:para identifier="YIGECN781337103">text in <?XSL PageEnd _567?> a para</cl:para>
<cl:para identifier="YIGECN781337101">text in a para</cl:para>
<?XSL PageEnd _568?>
<cl:para identifier="YIGECN781337102">text in a para</cl:para>
<cl:para identifier="YIGECN781337103">text in a para</cl:para>
<cl:figure number="numbered" position="fixed" identifier="FQOPWK022337863">
<cl:simple-meta>
<cl:title identifier="GIUSIS006030261">title text</cl:title>
</cl:simple-meta>
<cl:metadata-wrapper>
<cl:descriptive-media-meta>
<cl:media-term>Image</cl:media-term>
</cl:descriptive-media-meta>
</cl:metadata-wrapper>
<cl:media identifier="SUJESI135995607">
<cl:media-object media-size="page" height="550" width="206" units="pixel" link-target="95.jpg" identifier="UXNAAI395621596" asset-id="UXNAAI395621596"/>
</cl:media>
</cl:figure>
<?XSL PageEnd _568?>
<cl:para identifier="ECILBA810445866">text in a para</cl:para>
</cl:sect2>
在上面的代码段中,<?XSL PageEnd _568?>
是重复的标记。
我有一个想法,这可以通过正则表达式搜索和替换来补救。
我开始考虑以下几点... 搜索:(<?XSL PageEnd _[[:alnum:]]+?>)(?s:.*)1
替换:$1$2
<- 这并不像我预期的那样工作。
在非常小的规模上,在完美场景中少于 10 个实例;我相信正则表达式可能能够完成这项工作
我遇到了问题:
- 换行文本在我的给定示例中不起作用。
- 运行整个文件时出现灾难性回溯错误(这 可能包含其中的 1,000 个以上(。
- 如果 PageEnd 标记重复两次以上。(176, 176, 176(
- 如果 PageEnd 标记重复,但其他网页也可能在 (176, 177, 177, 176, 176( 之间重复
我认为正则表达式是一个好的开始 - 但它只是无法单独在记事本++中远程完成此任务。
如果有人能帮助我指出一个我可以开始深入挖掘的方向,我将不胜感激。虽然它可能不完全适用,但我有VB和VBA的经验以及一点PowerShell。
提前感谢!!
> 检查下一个正则表达式(?=(^<?XSL PageEnd _d+?>$))(?<=1[sS]+)1
。
要在线试用正则表达式并获得解释,请单击此处。
但是这个正则表达式仅适用于引擎,它支持在后视中无限重复。