2011-08-03 26 views

cevap

160

Bir dize olarak regex oluşturmak zorunda.

+12

+1, daha önce dokümanlarda fark etmemiştim! – bdeniker

+2

Değişkeniniz önce gelirse ne olur? 'r' '+ foo +' bar '? – deed02392

+0

@ deed02392 Eğer 're.escape (foo) 'yaparsanız, neye ihtiyacınız olursa, gerekli değildir. Aslında, 'r' olup olmadığına bakılmaksızın unicode dizisi olarak verilen her şeyi yeniden yorumluyorum. – OJFord

19
rx = r'\b(?<=\w){0}\b(?!\w)'.format(TEXTO) 
+0

1 dize enterpolasyon uzağa gidiyor beri. – Chris

+3

:-) Dize enterpolasyonu hiç gitmeyeceğinden şüphe duyuyorum ... –

+1

@phasetwenty: Hayır, öyle değil. Daha çok biçimlendirmeyi seviyorum, ancak Python çekirdek devreleri eski printf sözdizimini kaldırmayı planlamıyor. Re.escape başvurusu için –

32
if re.search(r"\b(?<=\w)%s\b(?!\w)" % TEXTO, subject, re.IGNORECASE): 

Bu bir dize olarak regex texto ne olduğunu ekler.

TEXTO = sys.argv[1] 
my_regex = r"\b(?=\w)" + re.escape(TEXTO) + r"\b(?!\w)" 

if re.search(my_regex, subject, re.IGNORECASE): 
    etc. 

Not metin özel karakterler varsa, bunlar gibi yorumlanamaz böylece re.escape kullanımı:

1

benim de katıldığım her şeyden sürece:

sys.argv[1] oldu sen bu durumda bunu istiyorum çünkü bir regex

gibi davranmaya, re.escape kullanmak istemem Chicken\d{2}-\d{2}An\s*important\s*anchor

sys.argv[1] = "Chicken\d{2}-\d{2}An\s*important\s*anchor" 

gibi bir şey

TEXTO = sys.argv[1] 

if re.search(r"\b(?<=\w)" + TEXTO + "\b(?!\w)", subject, re.IGNORECASE): 
    # Successful match 
else: 
    # Match attempt failed 
1

Birbirine benzeyen kullanıcı adlarını ve Ned Batchelder'ın dediği şeyi aramam gerekiyordu. güvenilir bir şekilde yardımcı olur. Ancak, benim yeniden arama terimi oluşturmak için re.compile kullanıldığında ben temizleyici çıktı bulmuştu: Ben çok uygun inşa etmek bulmak

print(matches[1]) # prints one whole matching line (in this case, the first line) 
print(matches[1][3]) # prints the fourth character group (established with the parentheses in the regex statement) of the first line. 
1

: kullanarak

pattern = re.compile(r"("+username+".*):(.*?):(.*?):(.*?):(.*)" 
matches = re.findall(pattern, lines) 

Çıktı yazdırılabilir aşağıdaki Birden çok küçük deseni bir araya getirerek düzenli bir ifade kalıbı.

import re 

string = "begin:id1:tag:middl:id2:tag:id3:end" 
re_str1 = r'(?<=(\S{5})):' 
re_str2 = r'(id\d+):(?=tag:)' 
re_pattern = re.compile(re_str1 + re_str2) 
match = re_pattern.findall(string) 
print(match) 

Çıktı:

[('begin', 'id1'), ('middl', 'id2')] 
İlgili konular