Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用正则表达式将字符串拆分为不同长度的块_Python_Python 3.x_Regex - Fatal编程技术网

Python 如何使用正则表达式将字符串拆分为不同长度的块

Python 如何使用正则表达式将字符串拆分为不同长度的块,python,python-3.x,regex,Python,Python 3.x,Regex,这里有一个包含11数字的字符串。我需要将字符串拆分为长度为2,2,2,3,2的块,这是我遵循的方法,也是我在stackoverflow中发现的方法 from itertools import islice numbers = '01234567891' it = iter(numbers) n = [2, 2, 2, 3, 2] s = '-'.join(''.join(islice(it, None, x)) for x in n) print(s.split('-')) ['01',23'

这里有一个包含
11
数字的字符串。我需要将字符串拆分为长度为
2,2,2,3,2
的块,这是我遵循的方法,也是我在stackoverflow中发现的方法

from itertools import islice
numbers = '01234567891'
it = iter(numbers)
n = [2, 2, 2, 3, 2]
s = '-'.join(''.join(islice(it, None, x)) for x in n)
print(s.split('-'))
['01',23',45',678',91']

以上答案正是我想要的

但是我试图通过使用regex得到同样的结果,假设会有一个简便且较短的方法,但它并没有给我预期的结果

这是我使用regex编写的简单代码

import re
number = '01234567891'
splited = re.split(r'\d{2}\d{2}\d{2}\d{3}\d{2}', number)
print(splited)
如果有人能帮我找出我在regex方法中做错了什么,我将不胜感激

使用
re.split()
,您告诉它在正则表达式匹配前后获取子字符串。相反,您可以将匹配组与
re.match()
re.search()
一起使用。匹配组使用括号,如
(\d{2})


在这里,我还使用了一种理解方法来避免键入整个内容,这并不是必须的,但我只是不想手动添加所有括号。

为什么要使用正则表达式?我指定了正则表达式,因为我认为正则表达式是将字符串拆分为不同长度块的最佳候选者。还有其他更好的解决办法吗。。?如果是,我毫不犹豫地欢迎它。
import re
number = '01234567891'
regex = ''.join(rf'(\d{{{n}}})' for n in [2, 2, 2, 3, 2])
# (\d{2})(\d{2})(\d{2})(\d{3})(\d{2})

m = re.match(regex, number)
print(m.groups())  # -> ('01', '23', '45', '678', '91')