2016-04-02 21 views
0

Python'da düzenli ifadeleri kullanmak için, 1. karakterin bir rakam olduğu bir 4 karakter dizesi ve bir rakam ya da bir büyük harf olmak üzere diğer 3 karakterle söylemek istiyorum. İşte 1CTT, 2IR8, 35TR, 4T1Rpython'da düzenli bir ifade tanımlayın

ben birçok yolu denediklerini

uymalıdır modellerinin örneklerini var, burada denedim son kod:

exp=re.compile("[0-9]{1}([A-Z0-9]{3})") 

Yardımlarınız için teşekkür ederiz!

+0

emin görünüyor o gerektiğini gibi çalışmış olmak That (ilk '{1}' eskimiş olduğunu ve kullanılmış olabilir rağmen '\ d' ve' \ u'). Bu ifadeyle ilgili sorun nedir? – usr2564301

+0

Sadece dizgenin başlangıcını ve sonunu belirlemek için çapalar eklemeniz gerekir, '{1}' yararsızdır, kaldırır. –

+0

@CasimiretHippolyte: Her bir desende ayrı olarak kullanıldığında bunun çapalara ihtiyacı olduğunu düşünmüyorum. - Ah bekle: demek istediğim * aynı zamanda yanlış bir şekilde "wotthis0ABC" gibi bir şeyle eşleşecektir. Sağ. – usr2564301

cevap

3

En son çalıştığınız ifade doğru görünüyor ve sağlanan test dizeleriyle eşleşmelidir. Eğer {1} belirtmek gerekmez ve bir yakalama grubuna gerek (parantez) orada olmasına rağmen:

>>> import re 
>>> text = "text, 1CTT, 2IR8, 35TR, 4T1R, smth else" 
>>> pattern = re.compile(r"[0-9][A-Z0-9]{3}") 
>>> pattern.findall(text) 
['1CTT', '2IR8', '35TR', '4T1R'] 
Siz ayrıca (@Jon Clements'de sayesinde) kelime sınır kısıtlama eklemek gerekebilir

:

>>> text = "text, 1CTT, 2IR8, 35TR, 4T1R, smth else, 35TT35XYZ" 
>>> pattern = re.compile(r"\b[0-9][A-Z0-9]{3}\b") 
>>> pattern.findall(text) 
['1CTT', '2IR8', '35TR', '4T1R'] 
+0

Metinle çalışın =" text, 1CTT, 2IR8, 35TR, 4T1R, smth else, 35TT35XYZ " 0 :) –

+0

@JonClements oh hayır, bunu bana yapma :) Tamam, bunu düzeltmeme izin verin. Teşekkürler. – alecxe

+0

Çok teşekkür ederim! – leas