2017-07-07 18 views
1

パディングミックスユニコード-ASCII文字列にスペースを持つASCII文字

它看灵魂塑Nike造得和学问同等重要。 

目標は、パッドにスペース、すなわち持つアスキーストリングです:

它看灵魂塑 Nike 造得和学问同等重要。 

私は、それは例えば、ストリングのマッチングに正常に見える([^[:ascii:]])正規表現を使用して試してみましたhttps://regex101.com/r/FVHhU1/1

が、コードに、' \1 'による置換は、所望の出力を達成していません。

>>> import re 
>>> patt = re.compile('([^[:ascii:]])') 
>>> s = u'它看灵魂塑Nike造得和学问同等重要。' 
>>> print (patt.sub(' \1 ', s)) 
它看灵魂塑Nike造得和学问同等重要。 

どのようにミックスユニコード-ASCII文字列にスペースを持つパッドASCII文字をしますか?

+1

しかし、regex101をpythonモードに設定していた場合、これはPythonでは動作しないことに気がつきました。 –

答えて

2

パターンは次のようになります。

([\x00-\x7f]+) 

あなたが使用することができます。

patt = re.compile('([\x00-\x7f]+)') 
patt.sub(r' \1 ',s) 

これが生成します。

>>> print(patt.sub(r' \1 ',s)) 
它看灵魂塑 Nike 造得和学问同等重要。 

ASCIIは16進コードを持つ文字の範囲として定義されます007fの間です。だから我々は、[\x00-\x7f]ような範囲を定義一つ以上のを示し、二つの空間を追加するr' \1 'と一致するグループを置き換えるために+を使用しています。