2015-12-26 22 views
1

我想將一個字符串分割爲多個部分,以使每行至少包含12個字符,並且該行在,上中斷。我正在使用re.match()與正則表達式(.{12}[^,]*,)做到這一點,它工作正常,但我沒有在字符串的末尾不匹配的一塊。我怎樣才能獲得這件作品?在re.match()後得到最終的不匹配的字符串片段()

舉個例子,在輸入字符串:

1 2 3 4 5 6 7 8 9 0, 1 2 3 4 5, 1 2 3, 1 2 3 4 5 6 7 8 9 0 1 2, 1, 2

應導致下列基團:

1 2 3 4 5 6 7 8 9 0, 
1 2 3 4 5, 1 2 3, 
1 2 3 4 5 6 7 8 9 0 1 2, 
1, 2 

上述正則表達式提供了所有但最後一組。樣本數據的正則表達式的在線版本可here

回答

1

一種選擇是使用re.findall

s = '1 2 3 4 5 6 7 8 9 0, 1 2 3 4 5, 1 2 3, 1 2 3 4 5 6 7 8 9 0 1 2, 1, 2' 
print(re.findall(".{12}[^,]*, |.*", s)) 
0

.{12}[^,]*,正則表達式的主要問題是,它需要是12個任意字符,然後0個或更多字符除了最逗號和空格之外的逗號,而您需要在最後匹配1到12個任意帶有可選逗號+空格的字符。

這裏是正則表達式:

.{1,12}[^,]*(?:,)? 
^^^  ^^^^^^^ - making comma+space optional with (?:...)? 
    ^^ - matching 1 to 12 symbols greedily 

regex demo

IDEONE demo:

import re 
p = re.compile(r'(.{1,12}[^,]*(?:,)?)') 
test_str = "1 2 3 4 5 6 7 8 9 0, 1 2 3 4 5, 1 2 3, 1 2 3 4 5 6 7 8 9 0 1 2, 1, 2" 
print (p.findall(test_str)) 

結果:['1 2 3 4 5 6 7 8 9 0, ', '1 2 3 4 5, 1 2 3, ', '1 2 3 4 5 6 7 8 9 0 1 2, ', '1, 2']

相關問題