NP ++ предположительно использует boost::regex
движок.
И далее, по-видимому, он использует строку формата замены boost-extended.
Это означает, что вы можете поместить условие в строку замены для проверки
какая группа соответствует, затем заменить соответственно.
синтаксис: (?1yes:no)
говорит, что группа 1 соответствует, да, иначе нет
синтаксис: (?{1}yes:no)
такой же
Если у него есть boost :: regex, используйте
обновление
only between <ADD1< and <
найти (?:(?!^)\G|<ADD1<)[^a-zA-Z0-9<]*\K(?:([A-Z])|([a-z])|\d)
заменить (?1X:(?2x:9))
Примечание - выберите формат строки замены как Boost Extended
если это не по умолчанию.
https://regex101.com/r/pJCsZa/1
Regex info
(?:
(?! ^ )
\G # Start match where last left off
| # or,
<ADD1< # New start
)
[^a-zA-Z0-9<]* # Optional non-letter or digit or <
\K # Ignore matched characters up to here
(?: # What's left, a letter or a digit
( [A-Z] ) # (1)
| ( [a-z] ) # (2)
| \d
)