首页 > 解决方案 > Python正则表达式忽略引号之间的内容

问题描述

我有一个字符串,其中一部分用引号括起来。就像下面代码片段第三行的那个。我希望将字符串格式化为 dict 文字。意思是在缺少引号的地方,应该添加它们。但是引号内的部分必须忽略。我想出了下面的代码来处理这个:

from ast import literal_eval
from re import sub

str = "key1:[val1,val2,val3],key2:'val4A,val4B'"
str = sub(r"([\w\-\.]+|[\"'].*[\"'])", r"'\1'", f"{{{str}}}")
str = sub(r"[\"']{2,}(.*)[\"']{2,}", r"'\1'", str)
fin = literal_eval(str)
print(fin)

这段代码可以完成工作,但我想知道是否有一种方法可以通过一次性使用 sub 来实现这一点。在您将此标记为重复之前,我尝试了网络上提供的大量解决方案,包括正负前瞻和后视、排除和简单的否定匹配。找不到任何可行的方法。如果有我错过的解决方案或任何人有解决方案,我将非常感谢您了解它。

标签: regexpython-3.x

解决方案


试试这个([\w\-\.]+(?=(?:[^']*'[^']*')*[^']*$))

现场演示


推荐阅读