2016-03-22 24 views
2

Bir dizi dizede "M" karakterinden önce sayıyı çıkarmaya çalışıyorum. Python'u Kullanarak Bir Dizeden Önce Numarayı Çıkarma

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

böylece temelde farklı karakterlerle ayrılan sayı bir set olacağını ve "M" bir defadan fazla gösterebilir: dizeleri gibi görünebilir. Aklıma gelen

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

bir yolu "M" ile dize bölmek ve saf sayılardır öğeleri bulmak için, ama orada daha iyi şüpheli: Burada Örneğin, ben dönmek için kodumu istiyorum Bunu yapmanın yolları. Yardım için çok teşekkürler. re.findall ile

cevap

9

Basit (\d+)M regex kullanabilir (rakam bir yakalama grubuna yakalanır nerede 1+ haneli (ler) M takip).

IDEONE demo bakınız: Burada

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

Ve O işi başarmak için rpartition kullanabileceğiniz bir regex demo

+1

Çok teşekkürler @Wiktor. Güzel çalışıyor :) – Helene

2

olduğunu.

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

Veri çerçeveme yeni bir sütun eklemek için bunu kullandım. Bu kod: df ['new_col'] = df.old_col.str.rpartition ('b') [2] # Burada b kaldırılacak harf ve 2 karakterlerin 'rpartition' dizisindeki konumdur. yeni sütunda istersiniz. Kod için teşekkürler. çok kullanışlıdır. – Jorge