在re.match()之后获取最终的非匹配字符串

时间:2015-12-26 15:36:05

标签: python regex

我想将一个字符串分成多个部分,这样每行包含至少12个字符,而且该行在,上断行。我正在使用re.match()使用正则表达式(.{12}[^,]*, )执行此操作,并且它工作正常,除了我在字符串末尾没有非匹配的部分。我怎样才能获得这件作品?

举个例子,输入字符串:

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

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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']