正则表达式搜索一种从代码中删除重复处理指令的方法



我有一个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. 换行文本在我的给定示例中不起作用。
  2. 运行整个文件时出现灾难性回溯错误(这 可能包含其中的 1,000 个以上(。
  3. 如果 PageEnd 标记重复两次以上。(176, 176, 176(
  4. 如果 PageEnd 标记重复,但其他网页也可能在 (176, 177, 177, 176, 176( 之间重复

我认为正则表达式是一个好的开始 - 但它只是无法单独在记事本++中远程完成此任务。

如果有人能帮助我指出一个我可以开始深入挖掘的方向,我将不胜感激。虽然它可能不完全适用,但我有VB和VBA的经验以及一点PowerShell。

提前感谢!!

> 检查下一个正则表达式(?=(^<?XSL PageEnd _d+?>$))(?<=1[sS]+)1

要在线试用正则表达式并获得解释,请单击此处。

但是这个正则表达式仅适用于引擎,它支持在后视中无限重复。

最新更新