如何使用正则表达式将此字符串拆分为两部分?

时间:2011-12-13 14:55:49

标签: python regex

想象一下:

a = "('a','b','c'),('d','e','f')"

我正在尝试使用re拆分它,以便我将获得包含"('a','b','c')"('d','e','f')的2个元素的数组。我试过了:

matches = re.split("(?:\)),(?:\()",a)

但这给了我结果:

'(2,3,4'
'1,6,7)'

我可以逐个字符地解析它,但如果可以使用正则表达式解决方案,我会更喜欢它。

3 个答案:

答案 0 :(得分:3)

您需要拆分逗号,前面加上),后跟(。但括号本身不应成为分裂点的一部分。为此,你需要使用积极的前瞻和断言背后的正面看法:

matches = re.split("(?<=\)),(?=\()",a)

See it

答案 1 :(得分:2)

试试这个:

from ast import literal_eval
a = "('a','b','c'),('d','e','f')"
x, y = literal_eval(a)

在此之后,x将为('a', 'b', 'c'),可以使用str(x)进行字符串化,或者,如果空格很重要,

"(%s)" % ",".join(repr(z) for z in x)

答案 2 :(得分:2)

split是错误的工具。你想要findall

import re
a = "('a','b','c'),('d','e','f')"
matches = re.findall("\([^)]*\)", a)

或几乎相当于

matches = re.findall("\(.*?\)", a)