记事本+ +正则表达式查找/替换指定的组和反向引用

时间:2019-02-03 02:08:34

标签: regex replace find backreference

让我的RegEx在NPP中查找/替换工作了几个小时,遇到了一些麻烦。 Here's一些代码了I'm上工作的文件: https://regex101.com/r/kQdy4L/6/ 我的目标是取代所有的 “0>。|。| ...” 按ID名称

测试字符串

location

取代

<movingPart index="0>8|1|3" referencePoint="0>8|1|0|4" referenceFrame="0>" scaleZ="true"/>
bla
bla
<i3dMapping id="KroneComprimaV180XC" node="0>" />
<i3dMapping id="novoGripPart2_fixPoint" node="0>8|1|0|4" />
<i3dMapping id="novoGrip_part2" node="0>8|1|3" />

在发生tial'n´错误后,我得到了此RegEx

<movingPart index="novoGrip_part2" referencePoint="novoGripPart2_fixPoint" referenceFrame="KroneComprimaV180XC" scaleZ="true"/>
bla
bla
<i3dMapping id="KroneComprimaV180XC" node="0>" />
<i3dMapping id="novoGripPart2_fixPoint" node="0>8|1|0|4" />
<i3dMapping id="novoGrip_part2" node="0>8|1|3" />

哪个可以找到节点+ id或仅找到我需要替换的节点,但是我不知道如何替换所有的“ 0>。|。|”。 ID名称

感谢您的帮助,这是我第一次遇到RegEx,所以这一切都让我感到困惑。 干杯佛瑞德

1 个答案:

答案 0 :(得分:1)

您可以使用这个正则表达式来为你做的替换:

(?<=(index|Point|Frame)=")([^"]+)(?=".*?id="([^"]+)" node="\2")

它对index="Point="Frame="中的一个使用正向后视(注意,我们必须切断reference,因为后视必须是固定长度) ,后跟一定数量的非{"字符(该值在组2中捕获),然后正向搜索一个看起来像id="someidvalue" node="\2"的字符串,其中\2表示该值较早捕获。值someidvalue在组3中捕获。

然后您可以替换为$3。请注意,由于某些原因,Notepad ++不喜欢逐个替换,因此您需要使用Replace All

这是regex101.com上的正则表达式演示