gpt4 book ai didi

python - 匹配和解析以从复杂字符串中提取信息

转载 作者:太空宇宙 更新时间:2023-11-03 18:38:11 25 4
gpt4 key购买 nike

我有一个字符串,其中包含来自函数的参数,例如'arg0, arg1=1, arg2=None',并且希望提取每个参数的名称和默认值。我处理简单的案件没有任何问题。问题在于字符串、列表和元组作为默认参数。这是我目前的尝试

def get_args(s):
regex = r'([a-zA-Z0-9._]*)\s*=?\s*(.*)'
# save and replace quoted strings
str_quoted = re.findall(r'([\"\'].*?[\"\'])', s)
for quote in str_quoted:
s = s.replace(quote, '%s')
# split arguments
args = re.split("[ ]{0,10},[ ]{0,10}", s)
# restore quoted strings
args = ('\n'.join(args) % tuple(str_quoted)).split('\n')
# return arguments
return [{
'name': re.match(regex, arg).group(1),
'def': re.match(regex, arg).group(2)
} for arg in args]

以及一些示例字符串

s1 = 'arg0, arg1=1, arg2=None'
s2 = 'arg0, arg1=",", arg2=None'
s3 = 'arg0, arg1=[1, 2], arg2=[1, 2]'
s4 = 'arg0, arg1=(1, 2), arg2=(1, 2)'
s5 = 'arg0, arg1=[1, [1,2,3]], arg2=[1, 2]'

get_args(s1) 使用此输出(包含参数名称和默认值的字典列表)

[{'def': '', 'name': 'arg0'},
{'def': '1', 'name': 'arg1'},
{'def': 'None', 'name': 'arg2'}]

s2 也可以工作,但其他的则不行。我当前的字符串解决方案是临时替换它们(请参阅 str_quoted 部分)。我对列表或元组尝试了类似的方法,但很快就遇到了问题。

对于可靠地将参数与默认值分开的 get_args 函数有什么建议吗?

最佳答案

在字符串的两侧附加花括号并执行 json.loads 那么你只需要处理一个字典。忘记回复。

arg_str = yourstring
arg_str = '{%s}' % arg_str
import json
dict_arg = json.loads(arg_str)

如果出现错误,可能是因为 json 只接受双引号,如果您的参数有单引号,请替换它们然后加载

关于python - 匹配和解析以从复杂字符串中提取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21141143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com