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')