Как заменить только один пробел на регулярное выражение в Python? - PullRequest
3 голосов
/ 16 сентября 2011

например:

T h e   t e x t   i s   w h a t   I   w a n t   t o   r e p l a c e

Я хочу получить такой результат:

The text is what I want to replace

Я пробовал это с shell, sed,

 echo 'T h e   t e x t   i s   W h a t   I  w a n t   r e p l a c e'|sed -r "s/(([a-zA-Z])\s){1}/\2/g"|sed 's/\  / /g'

это успешно,но я не знаю, как заменить это в python .кто-нибудь может мне помочь?

Ответы [ 3 ]

5 голосов
/ 16 сентября 2011

Если вы просто хотите преобразовать строку с пробелами между символами:

>>> import re
>>> re.sub(r'(.) ', r'\1', 'T h e   t e x t   i s   w h a t   I   w a n t   t o  r e p l a c e')
'The text is what I want to replace'

Или, если вы хотите удалить все одиночные пробелы и заменить их на один:

>>> re.sub(r'( ?) +', r'\1', 'A B  C   D')
'AB C D'
3 голосов
/ 16 сентября 2011

Только для ударов, вот решение без регулярных выражений, использующее строковые операции:

>>> text = 'T h e   t e x t   i s   w h a t   I   w a n t   t o   r e p l a c e'
>>> text.replace(' ' * 3, '\0').replace(' ', '').replace('\0', ' ')
'The text is what I want to replace'

(согласно комментарию я изменил _ на \0 (нулевой символ).)

1 голос
/ 18 сентября 2011

Просто для удовольствия, еще два способа сделать это.Они оба предполагают, что после каждого нужного символа есть строго пробел.

>>> s = "T h e   t e x t   i s   w h a t   I   w a n t   t o   r e p l a c e "
>>> import re
>>> pat = re.compile(r'(.) ')
>>> ''.join(re.findall(pat, s))
'The text is what I want to replace'

Еще проще, используя нарезку строк:

>>> s[::2]
'The text is what I want to replace'
...