【问题标题】:Return all strings between a list of strings with regular expressions in Python在Python中使用正则表达式返回字符串列表之间的所有字符串
【发布时间】:2017-01-24 06:27:21
【问题描述】:

我有一个字符串列表,如下所示:

list = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6']

我想检索一对字符串之间的所有项目和索引。例如,“a2”和“a6”之间的所有项目。

有没有办法用正则表达式做到这一点?

期望的输出如下: (实际上我只需要索引,因为我可以使用索引检索所有值)。 想要正则表达式的原因是;我正在尝试从 PDF 中挖掘输出,我正在尝试从 PDF 中提取的文本中挖掘文本,我正在创建一个包含所有输出的大列表。从这个从 PDF 创建的列表中,我试图自动提取 PDF 的这些文本。由于它们可以具有可变文本和不同格式,我希望能够采用各种格式来表示相同的数据。我认为正则表达式允许采用轻微可变格式的文本,然后将其转换为所需的格式。

参考列表示例:

 list = ['name', 'Mark', 'Smith', 'location', 'Florida', 'Coast', 'FL',  'date']
         location_indices = [3, 6]
desired namelst = ['name', 'Mark', 'Smith']
        location= ['location', 'Florida', 'Coast', 'FL']

我认为解决此问题的最佳方法是获取 Location 和 Date 之间的索引,然后我可以从那里生成位置列表。现在,由于我的原始列表在参考列表中可能略有不同,我认为正则表达式为我提供了灵活性,使原始列表与我重新格式化时略有不同。

【问题讨论】:

  • 为什么是正则表达式? .........
  • “我想检索所有项目和索引”您能否给出一个示例,说明您在输入list 时所期望的格式?
  • k[k.index('a2'):k.index('a6')] ,其中 k 是包含您的列表的变量

标签: regex python-3.x


【解决方案1】:

让我们定义您的列表:

>>> lst = ['a1', 'a2', 'a3', 'a4', 'a5', 'a6']

(为了不覆盖内置,我将列表重命名为lst。)

现在,让我们检索从 a2a6 的所有项目的索引和值:

>>> [(i,x) for (i,x) in enumerate(lst) if lst.index('a2')<=i<=lst.index('a6')]
[(1, 'a2'), (2, 'a3'), (3, 'a4'), (4, 'a5'), (5, 'a6')]

【讨论】:

  • 请注意,lst.index(...) 是一个 O(N) 操作,在 lst 的每个元素中发生一次,因此实际上是 O(N^2)。在理解之前存储这些值一次是值得的,尽管对于 OP 的目的来说它可能并不重要。
  • @CurtisLusmore 好点。如果分析器说这会花费大量时间,我会将调用移至列表理解之外的index
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-23
  • 2017-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 1970-01-01
  • 2018-12-26
相关资源
最近更新 更多