python - 如何从字符串中提取元组?

标签 python regex

我有以下字符串:

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'>

关于python - 如何从字符串中提取元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53982397/

相关文章:

python - pygtk 将图像缩放到宽度和高度

Python 3,为什么只有函数和部分在多处理 apply_async 中起作用,但闭包和 lambda 都不起作用

javascript - 电子邮件 ID 的正则表达式以避免在文本字段中输入电子邮件

regex - 使用 XPath 1.0,如何让多个匿名函数对提取的内容进行操作?

javascript - JavaScript 中的构造函数正则表达式

python - 通过 Django View 生成 CSV

python - 使用 Cython 循环 Numpy 数组

python - 使 Python-Telegram-Bot 持久化

regex - 带管道的 Fitnesse 正则表达式

正则表达式不允许只允许空格?