2010-08-20 25 views
11

Ayrıştırma için ideal olarak tüm boşlukları ve linebreaks'ları kaldırmam gerektiğini biliyorum, ancak bunu denediğim bir şey için hızlı bir çözüm olarak yapıyorum ve neden çalışmadığını anlayamıyorum .. Metnin farklı alanlarını sardım "#### 1" gibi sarmalayıcılarımla birlikte belgede ve çalışmamdan bağımsız olarak çalışmayı denemeye çalışıyorum, bence doğru bir şekilde çok satırlı kullanıyorum. herhangi bir öneriyi takdir ediyorPython regex, çoklu çizgi üzerinde eşleştirme modeli .. neden bu çalışmıyor?

Bu da hiç sonuçları verir:

string=' 
####1 
ttteest 
####1 
ttttteeeestt 

####2 

ttest 
####2' 

import re 
pattern = '.*?####(.*?)####' 
returnmatch = re.compile(pattern, re.MULTILINE).findall(string) 
return returnmatch 
+1

sen ' ''' veya ' ''" ' –

+0

Tamam, ben bu kavramı cevapsız çok hatlı dize sembollerini kullanarak değiliz çünkü dönemini yayınlanmaz Tamamen o zaman, bu belgeden bahsetmek için yeniden belgelemeyi inceleyeceğim .. teşekkürler – Rick

+3

"string" öğesine atamanız bir sözdizimi hatasıdır. '' '' '? – msw

cevap

12

(tabii ki çok re.compile ile çalışır) re.findall(r"####(.*?)\s(.*?)\s####", string, re.DOTALL) deneyin.

Bu regexp, bölümün ve bölüm içeriğinin numarasını içeren tuplleri döndürecektir.

Örneğiniz için bu, [('1', 'ttteest'), ('2', ' \n\nttest')] döndürecektir.

(BTW: senin örneğin ''' veya """ kullanın satırlı dizeleri, aday olmayacağını)

+0

teşekkürler bilmiyordum, bu çalışır – Rick

19

satırlı hat dönüşü maç olacak . anlamına gelmez, bu ^ ve $ hatları sadece

ile sınırlı olduğu anlamına gelir

re.M re.MULTILINE belirtilen

, desen karakteri '^' dizesinin başında ve begi> adresinde maçları her satırın nizası (her yeni satırın hemen ardından); ve '$'> desen karakteri, dizenin sonunda ve her satırın sonunda eşleşir (hemen her satırdan önce>). Varsayılan olarak, '^' yalnızca dizenin başlangıcında ve dizenin sonunda yalnızca dizinin sonunda ve $ dizisinin sonundaki satırın hemen bitişiğinde "$" ile eşleşir.

re.S veya re.DOTALL. maçı bile yeni çizgiler yapar.

Kaynak

http://docs.python.org/