Поиск / и заменить его на; в теге xml с возвышенным текстом 3 - PullRequest
1 голос
/ 28 мая 2019

Я работаю над XML-файлом с этим тегом

<Categories><![CDATA[Test/Test1-Test2-Test3|Test4/Test5-Test6|Test7/Test8]]></Categories>

и пытаюсь заменить / на ; с помощью регулярных выражений в Sublime Text 3 .

Вывод должен быть

<Categories><![CDATA[Test;Test1-Test2-Test3|Test4;Test5-Test6|Test7;Test8]]></Categories>

Когда я использую это (<Categories>\S+)\/(.+</Categories>), оно соответствует всей строке и, конечно, если я используюэто \/ соответствует всем / везде внутри XML-файла.

Не могли бы вы помочь?

1 Ответ

2 голосов
/ 28 мая 2019

В качестве примера строки вы можете использовать \G для подтверждения позиции в конце предыдущего совпадения и использовать \K, чтобы забыть то, что уже было найдено, и затем сопоставить косую черту.

В замене используйте ;

. Используйте положительный прогноз, чтобы утверждать, что справа есть ]]></Categories>

(?:<Categories><!\[CDATA\[|\G(?!^))[^/]*\K/(?=[^][]*]]></Categories>)

Объяснение

  • (?: Группа без захвата
    • <Categories><!\[CDATA\[ Соответствие <Categories><![CDATA[
    • | Или
    • \G(?!^) Утверждение позиции наконец предыдущего матча, а не в начале
  • ) Закрыть группу без захвата
  • [^/]* Совпадение 0+ раз не / с использованием отрицательного символакласс
  • \K/ Забудьте, что было найдено, затем сопоставьте /
  • (?= Положительный взгляд вперед, подтвердите, что справа -
    • [^][]*]]></Categories> Соответствует 0+ раз не [ или ], затем сопоставьте ]]></Categories>
  • ) Закрыть положительный прогноз

Regex demo

...