Замените символы, но исключите слово, которое использует это регулярное выражение - PullRequest
3 голосов
/ 15 октября 2019

Я работаю над проблемой, где, например, есть предложение: «Сегодня _asf был пустым_словным днем__ и __bla__bla ». Я хотел бы получить предложение, в котором все: _ заменены пробелом, кроме слова null_word. Таким образом, выходное предложение должно выглядеть следующим образом: «Сегодня asf был днем ​​с нулевым_словом и бла-бла».

Чтобы добиться этого, я написал выражение с избыточностью:

 (\w*((?!null_word)\b\S+)[_]+\w*)

Это выражение выбирает всеслова, которые используют _ char и исключают null_word. Но теперь, как мне выбрать все символы _ из этих групп?

Я пытался разделить их следующим образом:

 (\w*((?!null_word)\b\S+)[_]+\w*)[_]

, но приведенный пример: день __

Спасибо за вашу помощь!

1 Ответ

5 голосов
/ 15 октября 2019

Вы можете использовать отрицательный вид сзади, чтобы утверждать, что то, что находится слева, не равно нулю

(?<!\bnull)_+
  • (?<! Отрицательный взгляд позади, утверждать, что непосредственно слева не является
    • \bnull Соответствует границе слова, за которой следует null
  • ) Закрыть взгляд назад
  • _+ Соответствовать 1+ раз под низу

Regex demo

В замене используйте пробел.

Если вы хотите оставить точно null_word, вы также можете сопоставить его с группой захватачтобы сохранить его, и сопоставьте подчеркивание, чтобы удалить его.

Затем в замене используйте группу захвата 1.

(\bnull_word\b)|_+

Regex demo | Python demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...