【问题标题】:How to split string into dictionary and return a specific dictionary value?如何将字符串拆分为字典并返回特定的字典值?
【发布时间】:2015-03-10 17:09:16
【问题描述】:

这里对 Python 非常陌生。

我有一个 python 脚本,它评估数据合同的每一行并根据一组标准提取某些值。我需要修改脚本现在还从 DataMember 行中提取 Name 值。但是,我无法让新的 ExtractDataMemberName 函数正常工作。

首先,我有一个函数,它使用 for 语句遍历文件的每一行:

for line in file:
        if IsDataMemberAttribute(line):
            name = ExtractDataMemberName(line)
        elif ...

ExtractDataMemberName(line) 函数中,我需要从字符串返回Name 值,如下所示的示例输入行。请注意,DataMember 行中属性的数量和顺序可能会有所不同。

示例输入:

"[DataMember(Name = "version", EmitDefaultValue = false, Order = 5)]"

预期输出:

version

我尝试了几种方法,包括尝试 lstrip [DataMember(" 和 rstrip )],然后尝试将生成的字符串拆分为字典以便我可以找到 Name 值,但我无法得到它工作。

谁能推荐从这样的字符串中提取名称值的最佳方法?

【问题讨论】:

标签: python string dictionary


【解决方案1】:

使用 split 有点难看:

s = '[DataMember(Name = "version", EmitDefaultValue = false, Order = 5)]'

print(s.split("Name =")[1].split(",")[0].strip()[1:-1])
version

或者使用re:

import re

print(re.findall("Name\s+=\s+\"(.*?)\",",s)[0])
version

【讨论】:

  • 也许在你的正则表达式中添加一个?,以防以后有报价?
  • @DSM:很好的建议,因为这可能会出现。我是使用正则表达式的新手。知道我应该在哪里添加吗?为此目的在正则表达式中?
  • @DSM,已添加但仍不匹配 "version" "foo"?我并不担心,因为我认为后面总是有一个逗号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多