>我有以下字符串:
r"(A1,B1,C1,D1),(A2,B2,C2,D2),..."
我想提取一个元组列表
[(A1,B1,C1,D1),(A2,B2,C2,D2),...]
A
,B
和D
是整数,而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'>
您可以使用模式
(?<=')(?:\\|\'|[^'])+(?=',)|d+
对于字符串内容(向前和向后看 '
秒),它将重复一个由以下任一组成的组:
-
\\
- 两个反斜杠(即表示单个文本反斜杠) -
\'
- 转义'
(即表示单个文本'
) -
[^']
- 除引号字符以外的任何内容
或者,它将匹配d+
,整数。
https://regex101.com/r/5beqXJ/1