重新匹配()后获得最后一段不匹配的字符串

2024-05-18 19:24:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个字符串分成多个部分,这样每一行至少包含12个字符,但也要在,上断行。我使用re.match()来处理regex (.{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


Tags: 数据字符串版本reherematch作品例子
2条回答

一种选择是使用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))

.{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']

相关问题 更多 >

    热门问题