python регулярное выражение, если некоторые слова содержат пробелы - PullRequest
1 голос
/ 29 мая 2020

Пример проблемы:

str1 = "ur a sh * tty comment ."

Мне нужно каждое слово из предложения, и я хотел заменить sh * tty на sh***tty (замените эти пробелы внутри слова на *)

Если я попробую:

for word in s.split():
    print(word)

, я получу:

ur
a
sh
*
tty
comment
.

sh * tty теперь разделено на 3 слова

  1. sh
  2. *
  3. tty

Но мне нужно именно это слово sh * tty, поэтому я могу заменить пробелы на * и сделать его sh***tty наконец.

Я не могу просто заменить пробелы на *. Мне просто нужно было заменить пробел на *, если это пространство находится внутри любого английского sh слова (типичная ошибка).

Я также пробовал:

s = "ur a sh * tty comment ."
makeBad = s.translate ({ord(c): "*" for c in " "})

Но я не хотел для замены пробелов, разделяющих 2 слова.

1 Ответ

1 голос
/ 29 мая 2020

Вы можете использовать

import re
str1 = "ur a sh * tty comment ."
nw = r"[]*!@#$%^&()[{};:,./<>?\\|`~=_+-]"
print( re.sub(rf'(\S) {nw} (\S)', r'\1***\2' , str1) )

См. Python демонстрацию .

Здесь шаблон будет выглядеть как

(\S) []*!@#$%^&()[{};:,./<>?\\|`~=_+-] (\S)

Соответствует

  • (\S) - Группа 1 (\1): любой символ без пробелов
  • - пробел
  • []*!@#$%^&()[{};:,./<>?\\|`~=_+-] - символ из набора: ]*!@#$%^&()[{};:,./<>?\|`~=_+-
  • - пробел
  • (\S) - Группа 2 (\2): любой непробельный символ.
...