2016-09-22 33 views
1

我有一個字符串是這樣的:如何在字符串中的最後一個號碼後,除去一切

w = 'w123 o456 t789-- --' 

我的目標是最後一個數後刪除一切,所以我期望的輸出將

w123 o456 t789 

它並不總是相同的結局,所以-- --只是一個例子。

import re 

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

給我

'-- --' 

我如何修改命令,這樣,它消除了這部分?

+0

如果使用貪心點,你會用're.sub('(。* \ d)。*',r'\ 1',w)' –

+0

@WiktorStribiżew:似乎也適用。隨意添加它作爲答案,然後我會upvote它。 – Cleb

回答

7

您可以使用:

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

\D+$將結束錨$之前刪除1個或多個非數字字符。

+1

有人可能也想考慮使用'[^ ​​0-9]'而不是'\ D',因爲這需要較少的RE使用知識。 –

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

的一點是,你的表達式包含懶惰點匹配模式和它匹配直到幷包括第一個或多個數字。

您需要使用貪婪點匹配模式來匹配到最後數字,捕捉部分爲捕獲組。然後,在替換模式中使用r'\1'反向引用來恢復結果中的值。

這將與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

相關問題