使用正则表达式选择两个范围,一个接着一个

时间:2017-06-16 18:39:30

标签: regex xml perl pcre

长话短说,我试图清理"来自绘图程序的脚本文件,用于播放。该程序(ArtRage for iPad)将所有笔划记录到XML脚本文件中。然后,您可以导出此文件并在iPad或桌面版应用程序中回放整个绘图过程。我想清除所有"撤消"操作

绘图"步骤"看起来像这样:

<StrokeEvent>
<StrokeHeader>
    <EventPt>   Wait: 0.428s    Loc: (806.416, 439.849) Pr: 1   Ti: 1   Ro: 0   Fw: 1   Bt: 0   Rv: NO  Iv: NO  </EventPt>
    <Recorded>  Yes </Recorded>
</StrokeHeader>
Wait: 0.000s    Loc: (805.622, 437.537) Pr: 1   Ti: 1   Ro: 0   Fw: 1   Bt: 0   Rv: NO  Iv: NO
</StrokeEvent>

我已将它缩短了一点,但整个内容都包含在开始和结束标签中。

撤消操作如下所示:

Wait: 0.661s    EvType: Command CommandID: Undo

它就在您撤消的步骤之后。

所以...我想直接搜索那些在其后立即执行撤消操作的完整标记实例,然后删除完整标记和撤消行。

我认为正则表达式是一个很好的方法,但我不太了解它。我正在网上看一个正则表达式课程,但它会让我稍微提升一下,这个特定的解决方案可以更快地派上用场。我已经能够选择完整的标签,但我无法选择那些跟随它们的撤销声明的标签。我尝试使用向前看但是选择了所有前面的标签。

这是我能得到的最接近的(原谅新手代码):

(<StrokeEvent>[\s\S]+?</StrokeEvent>)\nWait:.*Undo

我认为&#34;?&#34;在&#34; +&#34;之后将启用惰性选项并在第一次出现时停止,但我可能理解错误。

无论如何,感谢您给我的任何提示!

0 个答案:

没有答案