2011-09-16 3 views
3

는 :파이썬에서 단 하나의 공백을 regex로 대체하는 방법은 무엇입니까? 예를 들어

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 

나는 성공적이다

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' 

, 쉘, 나오지 것을 시도했다. 그러나 나는 이것을 파이썬에서 어떻게 바꿀지 모른다. 아무도 나를 도울 수 있니?

답변

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' 

을 또는 단지 하나

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

와우를! 시원한! 감사! : 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' 

(Per comm 나는 _\0 (null 문자)로 바 꾸었습니다.

+0

''_ ''대신' '\ 0' '을 사용하는 것이 좋습니다. –

+0

IMHO 정규식보다 훨씬 이해하기 쉽습니다. –

+0

@mu, 좋은 생각. :) – jathanism

1

그냥 재미 있기 때문에 두 가지 방법이 있습니다. 이 두 가지 모두 당신이 원하는 모든 문자 뒤에 공백이 있다고 가정합니다.

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