【问题标题】:find and extract string from long list with repeating pattern从具有重复模式的长列表中查找并提取字符串
【发布时间】:2013-08-29 10:16:02
【问题描述】:

我有两个文本列表,我想从中提取某些信息。

第一行(前几个术语)看起来像

line = "{"af":"16.63","al":"11.58",..."

如果可能的话,我想只将“”之间的字母提取到一个列表中。例如["af","al"...].

第二行很长,包含一个看起来像这样的序列

line = "...,"name":"Papua New Guinea"},..."

如果可能的话,我只想将"name":"<country>" 之后的字符串放在另一个列表中。例如[...,"Papua New Guinea",...]。同样的模式一次又一次地出现"name":"<country>"},我只想要国家。

这两个可能都可以使用 SED 通过管道传输到不同文件中的两个列表。我只需要摆脱所有周围的“绒毛”。

我尝试了正则表达式的组合,但它不起作用。我无法使语法正确。提前致谢。

【问题讨论】:

  • 您的line 字符串无效;您不能将" 嵌入到由" 分隔的字符串中;至少没有被引用。
  • 我强烈怀疑你有 JSON 数据;使用 json 模块将其转换为 Python 结构。
  • 是的,它是 JSON 数据。我会调查一下Martijn。谢谢。

标签: python regex parsing sed


【解决方案1】:

您正在查看 JSON 数据;使用 json module 将其解析为 Python 结构。剩下的任务就很简单了:

first_structure = json.loads(line)
print first_structure.keys()

second_structure = json.loads(countries_text)
print [d['name'] for d in second_structure]

【讨论】:

  • 如果这是在一个文件中怎么办。例如文件中唯一的一行是:jQuery.fn.vectorMap('addMap', 'world_en', {"width":950,"height":550,"pathes":{"id":{"path":. .. 其余数据
  • @Griff:那么你就有了 JavaScript。 JSON 是 JavaScript 的子集,因此如果您可以提取该行中第一个 { 和最后一个 } 之间的部分(使用 str.partition()str.rpartition()str.split()str.rsplit(),限制为1 拆分)然后您可以通常将结果解析为 JSON。
  • 我不能分区,因为它是嵌套的。 pastebin.com/Rct5yVie
  • @Griff:那是一个的大结构;我设法用countries = json.loads(data.partition(' = ')[2]) 加载它,所以在等号上拆分; countries['pathes'].keys() 给了我所有的国家代码,[d['name'] for d in countries['pathes'].values()] 所有的国家名称。
  • 为什么要按'='分区,数据从{开始。我只是让国家 = 向您展示我在 python 脚本中使用的内容。我应该有 country = json.loads("id"...) 吗?
猜你喜欢
  • 2021-10-20
  • 2021-01-13
  • 1970-01-01
  • 2012-11-07
  • 2015-07-14
  • 2020-02-02
  • 1970-01-01
  • 2012-06-20
相关资源
最近更新 更多