想象一下:
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)'
我可以逐个字符地解析它,但如果可以使用正则表达式解决方案,我会更喜欢它。
答案 0 :(得分:3)
您需要拆分逗号,前面加上)
,后跟(
。但括号本身不应成为分裂点的一部分。为此,你需要使用积极的前瞻和断言背后的正面看法:
matches = re.split("(?<=\)),(?=\()",a)
答案 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)