【问题标题】:How to split a string into different lengths of chunks by using regex [duplicate]如何使用正则表达式将字符串拆分为不同长度的块[重复]
【发布时间】:2021-04-22 03:09:00
【问题描述】:

这里我有一个包含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']

上面的答案正是我想要的。

但我试图通过使用正则表达式来获得相同的结果,假设会有一种方便且更短的方法,但它并没有给我预期的结果。

这是我使用正则表达式的简单代码

import re
number = '01234567891'
splited = re.split(r'\d{2}\d{2}\d{2}\d{3}\d{2}', number)
print(splited)

如果有人可以帮助我找出我在正则表达式方法中做错了什么,那将不胜感激。

['', '']

【问题讨论】:

  • 为什么要使用正则表达式?
  • 我指定了正则表达式,因为我认为正则表达式是将字符串拆分为不同长度块的最佳候选者。还有其他更好的解决方案吗..?如果是,我会毫不犹豫地欢迎它。

标签: python python-3.x regex


【解决方案1】:

通过使用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')

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

【讨论】:

    猜你喜欢
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    相关资源
    最近更新 更多