python

2015-07-27 9 views
7

'daki bir karakter arasındaki tüm rakamları bul Bu kolay bir soru olabilir ama istediğim sonucu alamıyorum!python

Ben aşağıdaki gibi bir metin var:

text = 'To get to the destination follow this direction 
1. First turn left and then 
text text text 
2. Secondly you have to some text here 
some text here 

For the second instruction follow the text below: 
«1. some text some text some text 
text text text. 
2. some text some text text text text. 
3. some text some text text text text.»' 

Python regex kullanıyorum ve "«" "»olduğunu" bu karakterler arasındaki tüm rakamları elde etmek istiyorum 1. 2. ve

test = re.findall(r'[«.*?](\d+)[.*?»]', text, re.DOTALL) 

veya bu:

patt = re.findall(r'«.*?(\d+).*?»', text, re.DOTALL) 
.

böyle bir şey denedi

ve diğerleri, ancak hiçbiri istediğimi iade etmiyor. Neyi yanlış yapıyorum?

Her iki desende de 1 rakamı başka bir rakam olmaksızın döndürülür. 2 ve 3 sayısı ne olacak?

+1

Lookahead ve lookbehind'i kullanmanız gerektiğini düşünüyorum, aksi halde <' and '> 'sadece bir kez matematiktir, böylece sadece bir sayı alırsınız. –

+0

Eğer lookahead veya lookbehind kullanırsam, regex'i << and >> @ tobias_k? – bettas

+0

@Beyaz bakış için, bu durumda, evet, lookahead için - hayır. Sizin için bir çözüm bulmak amacıyla, gözcülerin ve yakalama gruplarının bir kombinasyonu üzerinde çalışıyorum. Tek bir kontrata sahip birden fazla sonuç almak düzenli ifadeyle kolay değildir, sırayla çoklu eşleşmeler yapmak daha kolay olur. –

cevap

4
text = '''To get to the destination follow this direction 
1. First turn left and then 
text text text 
2. Secondly you have to some text here 
some text here 

For the second instruction follow the text below: 
«1. some text some text some text 
text text text. 
2. some text some text text text text. 
3. some text some text text text text.»''' 


print re.findall(ur"\d+",re.findall(ur"«([\s\S]*?)»",text)[0]) 

veya

print re.findall(ur"\d+","\n".join(re.findall(ur"«([\s\S]*?)»",text))) 

Bu sizin için bunu yapmak gerekir.

+0

evet! @vks çalışır! Ama yine de neden bu tür problemler için regex kullanmakla ilgileniyorum! Neyse, bu deseni kullanacağım! Çok teşekkürler! – bettas

+0

@getas with regex u daha kısa bir çerez koduna sahip ..... – vks