【问题标题】:Extract a list from a string using 're'使用're'从字符串中提取列表
【发布时间】:2012-11-23 06:03:07
【问题描述】:

我有一个这种格式的字符串:any_string = "[u'02', u'03', u'04', u'05']"。 我想从中提取一个应该看起来像 new_list = ['02', '03', '04', '05']

的列表

我正在使用're'。我正在编写以下代码来完成这项工作,但没有运气

import re

new_list = re.findall(r'["w "]', any_string)

我得到的结果是[' ', ' ', ' ']

基本上我想要一个像 new_list = ['02', '03', '04', '05'] 这样的列表,这样我就可以遍历像 02, 03, 04 , 05 这样的单个项目

【问题讨论】:

  • re.findall(r"'(\w+)'", any_string) 可以,但ast.literal_eval 解决方案是最好的解决方案(缺少以更合适的格式获取数据,如 json/yaml)

标签: python regex parsing


【解决方案1】:

如果您没有绑定到re,那么ast 呢?再写一封信:)

In [1]: import ast

In [2]: any_string = "[u'02', u'03', u'04', u'05']"

In [3]: my_list = ast.literal_eval(any_string)

In [4]: type(my_list)
Out[4]: <type 'list'>

In [5]: my_list
Out[5]: [u'02', u'03', u'04', u'05']

In [6]: for item in my_list:
   ...:     print item
   ...:
   ...:
02
03
04
05

【讨论】:

  • 基本上我想要一个像这样的列表 new_list = ['02', '03', '04', '05'],这样我就可以遍历像 02、03、04 这样的单个项目, 05
  • @sandeep 所以ast.literal_eval() 实际上会返回你的字符串的文字评估,在这种情况下是一个列表。我将举一个希望对您有所帮助的示例。
  • 非常感谢 RocketDonkey,它对我有用。但是我们可以使用're'来做到这一点吗?
  • @sandeep 太棒了,很高兴听到它。至于re 解决方案,dbr 实际上将其发布在对您原始帖子的评论中。如果您需要使用re,则可以使用该表达式。
【解决方案2】:

我想问你从哪里得到这个字符串。它看起来像是一个通过str()repr() 传递的列表。如果您需要将列表序列化为字符串,请使用 JSON 或 pickle

【讨论】:

  • 哈,+1 还建议使用非重新选项:)
  • :) 我只在必要时使用re
  • 这是 not JSON 字符串,这是以 unicode 字符串作为元素的 Python 列表文字。使用 RocketDonkey 的解决方案确实好很多。但是,尝试不反对。
  • 你是对的,尽管我仍然认为他们应该首先专注于消除解析这个字符串的需要。
  • @NathanVillaescusa:显然他必须这样做,但是如果他能够(例如控制生成字符串的代码),您在关于移动到不同格式的部分是正确的。 JSON 更流行,并被确立为数据交换格式。
猜你喜欢
  • 1970-01-01
  • 2018-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2013-05-17
  • 1970-01-01
  • 1970-01-01
  • 2019-08-26
相关资源
最近更新 更多