2011-09-16 5 views
3

:私はシェル、sedは、Pythonで1つの空白をreg​​exと置き換えるには?例えば

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' 

でそれが正常だと試みた

The text is what I want to replace 

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 

私はこのような結果が欲しいです。 しかし、これを置き換える方法がわかりませんpythonです。誰も私を助けることができますか?

答えて

5

あなただけの各文字の間に空白がある文字列を変換したい場合は:あなたはすべての単一の空白を削除し、空白を交換したい場合は、

>>> 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' 

をまたはちょうど1:

>>> re.sub(r'(?) +', r'\1', 'A B C D') 
'AB C D' 
+0

WAWを!クール!ありがとう! :D – kEvin

+0

@kEvinは、文字列の先頭にあるスペースを置き換えません。 – agf

+0

@agfはい、代わりの方法を示します。 – eph

3

ちょうどキックのために、ここでは文字列演算を使用して非正規表現のソリューションです:

>>> 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(ヌル文字)に変更しました。

+0

'' _''の代わりに ''\ 0'''を使いたいかもしれません。 –

+0

IMHOは正規表現よりはるかに理解しやすいです。 –

+0

@mu、良いアイデア。 :) – jathanism

1

これは2つの方法で実行できます。これらは両方ともあなたが望むあらゆる文字の後に厳密にスペースがあることを前提としています。

>>> 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' 
+0

スライスはクールです! – eph

関連する問題