Есть ли способ объяснить пунктуацию в этом простом цикле for? - PullRequest
0 голосов
/ 29 января 2020

В настоящее время я создаю код, в котором будет выбрана случайная песня, и будут напечатаны первые буквы каждого слова вместе с именем исполнителя, а пользователь должен попытаться угадать название песни. Я хочу иметь возможность сделать этот код для учета пунктуации, как апострофы.

Пример: -

В настоящее время вывод - "I__ A B_______ - Smash Mouth"

Ожидаемый вывод - "I'_ A B_______ - Smash Mouth".

Может кто-нибудь сообщить мне простой способ сделать это?

Мой текущий код выглядит следующим образом:

print(' '.join(x[0] + '_' * (len(x) - 1) for x in string.split()))

Ответы [ 2 ]

1 голос
/ 29 января 2020

Вы можете использовать регулярные выражения только для замены букв. Используйте sub для замены букв на '_':

>>> import re
>>> s = "I'm A Believer"
>>> print(' '.join(x[0] + re.sub("[a-zA-Z]", '_', x[1:]) for x in s.split()))
I'_ A B_______

Более интересный пример:

>>> s = "Hello, I love you! - Don't you?"
>>> print(' '.join(x[0] + re.sub("[a-zA-Z]", '_', x[1:]) for x in s.split()))
H____, I l___ y__! - D__'_ y__?
0 голосов
/ 30 января 2020

Используя re, вы можете сопоставить все

  • буквы [a-zA-Z]
  • , которым не предшествует пробел (?<! )

последнее называется отрицательным взглядом за утверждением:

import re
s = "I'm A Believer"
s[0] + re.sub(r'(?<! )[a-zA-Z]', '.', s[1:])

# I'. A B.......
...