【问题标题】:How to get all the substrings in string using Regex in Python如何在 Python 中使用 Regex 获取字符串中的所有子字符串
【发布时间】:2020-01-14 20:55:42
【问题描述】:

我有一个字符串,例如:"12345"

使用正则表达式,如何获取由一到三个连续字符组成的所有子字符串以获得输出,例如:

'1', '2', '3', '4', '5', '12', '23', '34', '45', '123', '234', '345'

【问题讨论】:

  • 为什么需要正则表达式?我相信这将非常困难和/或非常低效
  • 我正在寻找一种方法,以便在有效的时间内给我结果,我认为正则表达式可能比传统的 2 for 循环更快。考虑这种方法是不是我错了?解决这个问题的有效方法是什么?提前致谢。
  • Regex 在这个问题的上下文中不能很好地为您服务,因为它根本不是这项工作的工具。双 for 循环、list-comprehensionsitertools 和其他工具会在这里为您提供更好的服务。
  • 对于itertools.combinations()来说这是一个简单的任务:[''.join(_) for i in range(1, 4) for _ in itertools.combinations('12345', i)]
  • @accdias 这不太正确,因为它不会给出连续的子字符串。你会得到像'14' '15 这样的东西。

标签: python regex python-3.x string substring


【解决方案1】:

您可以将re.findall 与一个匹配重复多次且从1 到3 迭代的字符匹配的正向前瞻模式一起使用:

[match for size in range(1, 4) for match in re.findall('(?=(.{%d}))' % size, s)]

但是,使用带有嵌套 for 子句的列表推导来遍历所有大小和起始索引会更有效:

[s[start:start + size] for size in range(1, 4) for start in range(len(s) - size + 1)]

给定s = '12345',以上两个都将返回:

['1', '2', '3', '4', '5', '12', '23', '34', '45', '123', '234', '345']

【讨论】:

    猜你喜欢
    • 2014-04-23
    • 2011-08-21
    • 2023-01-07
    • 2012-05-12
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    • 2015-06-01
    相关资源
    最近更新 更多