2016-09-22 3 views
1

내가 가진 문자열 : 내 목표는 마지막 번호 다음에 모든 것을 제거하는 것입니다 문자열의 마지막 번호 다음에 모든 것을 제거하는 방법

w = 'w123 o456 t789-- --' 

, 그래서 내 원하는 출력이 될 것

w123 o456 t789 

항상 같은 결말은 아니기 때문에 -- --은 하나의 예일뿐입니다.

import re 

re.sub('(.*?)(\d)', '', w) 

는이 부분을 제거하도록

'-- --' 

어떻게 명령을 수정할 수 있습니다 나에게 준다?

+0

당신이 욕심 도트를 사용하는 경우, 're ('(. * \ d). *', r '\ 1', w)' –

+0

@ WiktorStribiżew : 잘 작동하는 것 같습니다. 자유롭게 대답을 추가하면 나는 그것을 upvote 것입니다. – Cleb

답변

7

당신은 사용할 수 있습니다

>>> w = 'w123 o456 t789-- --' 
>>> re.sub(r'\D+$', '', w) 
'w123 o456 t789' 

\D+$ 최종 앵커 $ 전에 하나 이상의 숫자가 아닌 문자를 제거합니다.

+1

'\ D'보다는'[^ 0-9]'를 사용하는 것이 좋습니다. 왜냐하면 RE에서 사용할 지식이 적기 때문입니다. –

-1
st = 'w123 o456 t789-- --' 
print st.rstrip() 
"w123 o456 t789' 
1

점은 식을 게으른 도트 일치하는 패턴을 포함하고와 첫 번째 이상의 숫자를 포함하여 최대 일치하는 것입니다.

당신은 마지막 자리까지 일치 욕심 도트 일치하는 패턴을 사용하여 캡처 그룹에 그 부분을 캡처해야합니다. 그런 다음 대체 패턴에서 역 참조를 r'\1'으로 사용하여 결과의 ​​값을 복원하십시오.

이 한 줄 문자열과 함께 작동합니다 또한

re.sub(r'(.*\d).*', r'\1', w) 

또는 앵커 및 지원 문자열을 바꿈과 :

re.sub(r'^(.*\d).*$', r'\1', w, flags=re.S) 

Python demo:

import re 
w = 'w123 o456 t789-- --' 
print(re.sub(r'^(.*\d).*$', r'\1', w, flags=re.S)) 
# => w123 o456 t789 
+0

자세한 설명을 주셔서 감사합니다! Upvoted. – Cleb

관련 문제