我有以下字符串:
r"(A1,B1,C1,D1),(A2,B2,C2,D2),..."
我想提取一个元组列表
[(A1,B1,C1,D1),(A2,B2,C2,D2),...]
ABD是整数,而C是用单引号括起来的字符串。硬部分是因为C可能包含任何字符,包括转义单引号(\')、逗号(,)、转义反斜杠(\\)和整数我试图用正则表达式来解决这个问题,但是我不知道怎么做。
到目前为止,我试图通过查看第一个单引号来匹配字符串的结尾,该引号前面有偶数个反斜杠(0、2、4,…),但我无法使其工作知道吗?
预期结果:
r"(21,3,'abc\',57',1993)"-->(21,3,'abc\',57',1993)
r"(21,3,'abc\\',1993)"-->(21,3,'abc\\',1993)
r"(21,3,'abc\\\\\',57\\\\',1993)"-->(21,3,'abc\\\\\',57\\\\',1993)

最佳答案

可以使用ast.literal_eval计算包含python文本的字符串,

import ast
ip = r"(21,3,'abc\',57',1993)"
op = ast.literal_eval(ip)

print(op)
# output,
# (21, 3, "abc',57", 1993)


# verify that they are correct types,
for i in op:
    print("{} is {}".format(i, type(i)))

# output,
# 21 is <class 'int'>
# 3 is <class 'int'>
# abc',57 is <class 'str'>
# 1993 is <class 'int'>

10-06 10:53