2010-04-08 14 views
8

Yeni satır karakterlerinde (Windows, OS X ve Unix metin dosyası yeni satır karakterleri için catering) bir dizeyi bölmeye çalışıyorum. Bunların herhangi bir ardıl olması durumunda, buna da bölünmek istiyorum ve sonuçta herhangi bir içermez.Yeni satır karakterlerinin art arda bölünmesi için regex

"Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix" 

sonucu olacaktır:

Yani, aşağıdaki bölüşülürken

['Foo', 'Double Windows', 'Double OS X', 'Double Unix', 'Windows', 'OS X', 'Unix'] 

Ne regex kullanmalıyım?

+3

diğer dikey boşluk konusunda endişeli misiniz? \ r \ n DOS'tır, ancak dikey sekme ve Unicode NBSP, PS, LS, NNBSP gibi başka olası dikey boşluklar da vardır. Python'un jenerik yeni hat konseptini destekleyip desteklemediğini kontrol etmek isteyebilirsiniz. Perl, sırasıyla herhangi bir dikey dikey boşluk veya satır besleme ile eşleşen \ v ve \ R öğelerine sahiptir. Eğer değilse, Unicode karakterleri istiyorsanız, bunları [\ r \ n] + karakter sınıflarınıza ve bu Unicode karakterlerini aramanın Python eşdeğerine ekleyin. – dawg

cevap

3
re.split(r'[\n\r]+', line) 
6

bu amaç için en basit desen siz "bir veya daha fazla satır başında veya satır karakterleri" olarak telaffuz edebilir r'[\r\n]+' olduğunu. hatlarının başlar uçlarında veya hiç boşluk varsa

+0

Yup. Bu işe yarıyor. Bölme çizgileri için – dawg

1
>>> s="Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix" 
>>> import re 
>>> re.split("[\r\n]+",s) 
['Foo', 'Double Windows', 'Double OS X', 'Double Unix', 'Windows', 'OS X', 'Unix'] 
20

, hiçbir argümanlarla line.split() kullanabilirsiniz. Çiftleri kaldıracak. . Değilse, [a for a a.split("\r\n") if a]'u kullanabilirsiniz.

DÜZENLEME: str türünde ayrıca "splitlines" adlı bir yöntem vardır.

"Foo\r\n\r\nDouble Windows\r\rDouble OS X\n\nDouble Unix\r\nWindows\rOS X\nUnix".splitlines()

+4

+1 –

0

kalıpları için greediness kurallarına dikkat etmek:

pattern = re.compile(r'(\r\n){2,}|(\n\r){2,}|(\r){2,}|(\n){2,}') 
paragraphs = pattern.split(text) 
İlgili konular