Блокнот ++ RegEx Найти / Заменить указанную группу и обратную ссылку - PullRequest
0 голосов
/ 03 февраля 2019

У меня возникли проблемы с тем, чтобы мой RegEx мог найти / заменить работу на АЭС в течение нескольких часов.Вот код из файлов, над которыми я работаю: https://regex101.com/r/kQdy4L/6/ Моя цель - заменить все "0>. |. | ..." их идентификатором

тестовая строка

<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" />

замещение

<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" />

После некоторой ошибки tial´n´error я получил этот RegEx

(".[>].*?")|<i3dMapping id=(?P<name>".*?") node=(".[>].*?")
(".[>].*?")|<i3dMapping id=(?P<name>".*?") node=(".[>].*?")\=1

Которые находят либо узлы + идентификаторы, либо только те узлы, которые мне нужно заменить, однако я не могу понять, как заменить все "0>. |. |."с идентификатором

Спасибо за помощь, это первый раз, когда я сталкиваюсь с RegEx, так что это все очень смущает меня.Ура Фред

1 Ответ

0 голосов
/ 03 февраля 2019

Вы можете использовать это регулярное выражение для замены:

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

Он использует положительный вид сзади для одного из index=", Point=" или Frame=" (обратите внимание, мы должны сократитьreference выключено, потому что вид сзади должен иметь фиксированную длину), за которым следует некоторое количество не " символов (это значение фиксируется в группе 2), затем положительный взгляд на строку, которая выглядит как id="someidvalue" node="\2", где\2 относится к значению, полученному ранее.Значение someidvalue фиксируется в группе 3.

Затем можно заменить на $3.Обратите внимание, что вам нужно использовать Replace All, по какой-то причине Notepad ++ не нравится заменять его на совпадение на основе совпадения.

Вот демонстрация регулярного выражения на regex101.com

...