使用正则表达式在python中拆分字符串

时间:2016-11-14 04:56:14

标签: python regex

我用

re.compile(r"(.+?)\1+").findall('44442(2)2(2)44')

可以获得

['4','2(2)','4']

,但我怎么能

['4444','2(2)2(2)','44']

使用正则表达式?

由于

3 个答案:

答案 0 :(得分:4)

不需要更改您的模式。只需要使用正确的功能来完成工作。如果模式中有捕获组,re.findall将返回组列表。要获得整个匹配,请使用re.finditer,以便您可以从每个实际匹配对象extract the full match

pattern = re.compile(r"(.+?)\1+")
[match.group(0) for match in pattern.finditer('44442(2)2(2)44')]

答案 1 :(得分:3)

对OP正则表达式的改动很小:

struct class_record_node
如果没有组,

[m[0] for m in re.compile(r"((.+?)\2+)").findall('44442(2)2(2)44')] 将为您提供完全匹配,如果有组,则

findall。因此,假设你的需要组正常工作,我们只需添加另一个组来包含完整匹配,然后提取它。

答案 2 :(得分:0)

你可以这样做:

[i[0] for i in re.findall(r'((\d)(?:[()]*\2*[()]*)*)', s)]

这里的正则表达式是:

((\d)(?:[()]*\2*[()]*)*)

将输出包含两个捕获组的元组列表,我们只对第一个感兴趣,因此i[0]

示例:

In [15]: s
Out[15]: '44442(2)2(2)44'

In [16]: [i[0] for i in re.findall(r'((\d)(?:[()]*\2*[()]*)*)', s)]
Out[16]: ['4444', '2(2)2(2)', '44']