Использование регулярных выражений в Notepad++, как захватить предыдущую строку после сопоставления выражения
У меня есть файл с тысячами записей, таких как:
<Source foo="goo">
<Name label="SomeLabel"/>
</Source>
<Target foo="bar">
<Name label="SomeLabel"/>
</Target>
Единственное, что изменяется, это строка "SomeLabel". Я пытаюсь написать поисковое выражение в Notepad++, которое будет возвращать либо только строки SomeLabel, либо, по крайней мере, всю строку. Однако я хочу эту строку, только если она находится между тегами
Спасибо!
2 ответа
<> На самом деле не проблема. В соответствии с этими ограничениями, вы можете легко получить только нужный тег
[^"]+(?="\/>[^<]*<\/Target)
Вы можете использовать следующее выражение
<Target[^>]*> # match <Target...>
(?:(?!</Target>)[\s\S])*? # match anything afterwards,
# make sure not to overrun </Target>
label="SomeLabel" # match label="SomeLabel"
(?:(?!</Target>)[\s\S])*? # same as above
</Target> # closing Tag
Здесь только записи с label="SomeLabel"
выберите подробный режим и посмотрите демонстрацию на regex101.com.