我想将一个字符串分成多个部分,这样每行包含至少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
答案 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
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']