Я хочу сопоставить любое не-ASCII слово длиной более 2 букв и добавить вокруг него квадратные скобки. Т.е. эта строка

[i]Abandon one's post:[/i] [c]P.[/c] τάξιν ο οὕνεχ’ ὅρκων, ἀν λείπειν, [c]V.[/c] τάξιν το ἐρημοῦν.

должен стать

[i]Abandon one's post:[/i] [c]P.[/c] [[τάξιν]] ο [[οὕνεχ]]’ [[ὅρκων]], ἀν [[λείπειν]], [c]V.[/c] [[τάξιν]] το [[ἐρημοῦν]].

Я пытался с этим, но это ничего не соответствовало

(?i)\b[a-z]*(?![a-z])\pM*\pL\w*

https://stackoverflow.com/questions/33967954/regex-to-search-for-words-containing-foreign-characters

1 ответ1

0

AFAIK Npp не знает свойство mark \pM , но вы можете сделать:

  • Ctrl+H
  • Найти что: \b((?:(?![a-zA-Z])\pL){3,})\b
  • Заменить на: [[$1]]
  • Заменить все

Объяснение:

\b              : word boundary
(               : start group 1
  (?:           : start non capture group
    (?!         : lookahead, make sure next character is NOT
      [a-zA-Z]  : latin letter
    )           : end lookahead
    \pL         : any letter in any language, case insensitive
  ){3,}         : must appear at least three times
)               : end group 1
\b              : word boundary

Замена:

[[$1]]          : content of group 1 surrounded with brackets

Результат для данного примера:

[i]Abandon one's post:[/i] [c]P.[/c] [[τάξιν]] ο [[οὕνεχ]]’ [[ὅρκων]], ἀν [[λείπειν]], [c]V.[/c] [[τάξιν]] το [[ἐρημοῦν]].

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .