2016-08-10 39 views
0

有沒有辦法使用拆分功能,而不會丟失單詞或字符,你用來分裂?如何在Python中使用正則表達式分割並保留分詞?

例如:

import re 
x = '''\ 
1. 
abcde. 
2. 
fgh 2.5 ijk. 
3. 
lmnop 
    ''' 
print(x) 

listByNum = re.split(r'\d\.\D', x) 

print(listByNum) 

the output 我想保持兩位數列表

的其他例子:

import re 
x = '''\ 
I love stackoverflow. I love food.\nblah blah blah. 
    ''' 
print(x) 

listBySentences = re.split(r'\.', x) 

print(listBySentences) 

output for example 2

+0

'(?= \ d \。\ D)|(?<= \ d \。\ D)'應該在其兩側分割,爲_ \ d \。\ D_創建一個單獨的元素。如果你想在一邊或另一邊,刪除其中一個斷言,保持另一邊。請注意,如果排除_ \。D_ – sln

+0

@sln,則無法獲得一側或另一側:請注意,您無法在python的「re」模塊中拆分空字符串 - 您需要使用regex代替。 – Jan

+0

@Jan - '請注意,你不能分裂一個空字符串'你能給我一個例子,這是如何與我的評論? – sln

回答

2

沒有很好的記錄,但你可以使用圓括號內表達的問題:

import re 
x = '''\ 
1. 
abcde. 
2. 
fgh 2.5 ijk. 
3. 
lmnop 
    ''' 
print(x) 

listByNum = re.split(r'(\d\.\D)', x) 

print(listByNum) 
# ['', '1.\n', 'abcde.\n', '2.\n', 'fgh 2.5 ijk.\n', '3.\n', 'lmnop\n '] 


甚至 乾淨數據後,您可以使用列表理解,就像這樣:

listByNum = [num.strip() for num in re.split(r'(\d\.\D)', x) if num] 
# ['1.', 'abcde.', '2.', 'fgh 2.5 ijk.', '3.', 'lmnop'] 


爲了保持內部的數字可以使用支持在空字符串上拆分的較新的 regex模塊:

import regex as re 
x = same string as above 
listByNum = [num.strip() for num in re.split(r'(?V1)(?=\d\.\D)', x) if num] 
# ['1.\nabcde.', '2.\nfgh 2.5 ijk.', '3.\nlmnop'] 
+0

這個號碼在不同的元素中,我可以把它們放在一起。 '#['1。 abcde。','2。 fgh 2.5 ijk。','3。 lmnop']' – asaf

相關問題