2016-03-22 38 views
2

我試圖在字符串「M」之前提取數字。字符串可能看起來像:在使用Python的字符串中的字符之前提取數字

"107S33M15H" 
"33M100S" 
"12M100H33M" 

所以基本上會有一組由不同字符分隔的數字,並且「M」可能會出現多次。對於這裏的例子,我想我的代碼返回:

33 
33 
12,33 #doesn't matter what deliminator to use here 

一個我能想到的方法是通過「M」來分割字符串,發現是純數字的項目,但我懷疑有更好方法來做到這一點。非常感謝您的幫助。

回答

9

你可以使用一個簡單的正則表達式(\d+)M1+位(S),隨後用M其中數字被捕獲到捕獲組)re.findall

IDEONE demo

import re 
s = "107S33M15H\n33M100S\n12M100H33M" 
print(re.findall(r"(\d+)M", s)) 

這裏是一個regex demo

+1

非常感謝@Wiktor。它很好地工作:) – Helene

2

您可以使用rpartition實現這一工作。

s = '107S33M15H'  
prefix = s.rpartition('M')[0] 
+0

我用它來添加一個新的列到我的數據框。這是代碼:df ['new_col'] = df.old_col.str.rpartition('b')[2]#其中b是要刪除的字母,2是字符'rpartition'數組中的位置你想在新欄目中。感謝代碼。非常有用。 – Jorge

相關問題