Регулярное выражение для замены текста внутри тегов в Notepad ++ - PullRequest
2 голосов
/ 02 декабря 2019

Hivemind!

Я пытаюсь редактировать файлы Memsource * .mxliff с помощью Notepad ++.
Когда я создаю задачу поиска, строки источника и цели смешиваются в огромном списке.
НоМне нужно вносить изменения только в строки внутри тегов <target>.../<target>.

Например:

1. <target>от 15 до 35 °C</target>
2. <target>Допустимый диапазон температур воздуха от -40 °C до +70 °C {1&gt;1)&lt;1}</target>  

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

Найти: (\d) °C
Заменить на: $1 $2

Какой самый оптимальный способ сделать это?
Любые советы будут высоко оценены. Большое спасибо!

Ответы [ 2 ]

3 голосов
/ 02 декабря 2019
  • Ctrl + H
  • Найти что: (?:<target>|\G)(?:(?!target)[\s\S])*?\K(\d+)\s*(°C)(?=.*</target>)
  • Заменить на: $1&nbsp;$2
  • ПРОВЕРКА Матч
  • ПРОВЕРКА Обтекание
  • ПРОВЕРКА Регулярное выражение
  • UNCHECK . matches newline
  • Заменить все

Пояснение:

(?:                         # non capture group
    <target>                # opening tag
  |                         # OR
    \G                      # restart from last match position
)                           # end group
(?:(?!target)[\s\S])*?      # 0 or more any character but not "target"
\K                          # forget all we have seen until this position
(\d+)                       # group 1, 1 or more digits
\s*                         # 0 or more spaces
(°C)                        # group 2
(?=.*</target>)             # must be followed by </target>

Замена:

$1              # content of group 1 (i.e. the temperature)
&nbsp;          # non breaking space
$2              # content of group 2 (i.e. °C)

Снимок экрана (до):

enter image description here

Снимок экрана (после):

enter image description here

1 голос
/ 02 декабря 2019

Предполагая, что у нас будет один °C в целевом теге, возможно, какое-то выражение будет похоже на:

(<\s*target\s*>[\s\S]*?\d)\s+(°C[\s\S]*?<\s*\/target\s*>)

и заменено на

$1$2

. смотреть в.

Демонстрация RegEx


Если вы хотите упростить / обновить / изучить выражение, это было объяснено на верхней правой панели regex101.com. Вы можете посмотреть соответствующие шаги или изменить их в этой ссылке отладчика , если вам будет интересно. Отладчик демонстрирует, что механизм RegEx может шаг за шагом потреблять некоторые входные строки образца и выполнять процесс сопоставления.


...