【问题标题】:How I can generate all combinations from RegEx (regular expression)?如何从 RegEx(正则表达式)生成所有组合?
【发布时间】:2017-08-26 19:40:25
【问题描述】:

例如,我有以下正则表达式:

60[FP]LP[FP]XXXXXX

现在需要所有可能的组合,在这种情况下:

60FLPFXXXXXX

60FLPPXXXXXX

60PLPFXXXXXX

60PLPPXXXXXX

输入正则表达式长度为 12 个字符,由大写字母 [A-Z] 和数字 [0-9] 组成

【问题讨论】:

  • ruby -e"strings = %w/60FLPFXXXXXX 60FLPPXXXXXX 60PLPFXXXXXX 60PLPPXXXXXX/;strings.each {|string| p /60([FLPF]{4})[A-Z0-9]{6}/.match(string)}"
  • 一个正则表达式可以有无限多个匹配的字符串。想想任何带有* 的正则表达式。

标签: python regex linux bash perl


【解决方案1】:

我找到了解决方案。使用工具 rexgen (https://github.com/teeshop/rexgen) 是否可以从给定的正则表达式生成所有组合:)

$ rexgen 60[FP]LP[FP]XXXXXX
60FLPFXXXXXX
60PLPFXXXXXX
60FLPPXXXXXX
60PLPPXXXXXX

【讨论】:

    【解决方案2】:

    正则表达式模式定义了一组字符串,因此理论上可以使用它来生成集合中的字符串列表,但它们并不意味着这样做。我不确定是否有人编写了一个模块来做到这一点。

    另一方面,glob 旨在完全按照您的意愿行事。你能用 glob 代替吗?

    say while glob('60{F,P}LP{F,P}XXXXXX');
    

    【讨论】:

    • 一组可能无限的字符串(例如a*)所以从最一般的意义上说,这个问题的答案是不可能的。
    • @Noufal Ibrahim,不是这样。您没有时间生成每个正则表达式的匹配集这一事实并不意味着它不可能。如果可以使用 glob,那么也可以使用正则表达式。
    • 从最一般的意义上说,不可能枚举与任何给定 glob 模式匹配的所有字符串(例如 foo.*),所以除非我误解了你的计数器,否则我的观点仍然有效。
    • 有可能做 OP 想要做的事情,这就是为什么我用“最一般意义上的”来限定我的句子。
    • 我不同意“问题的答案是不可能”。你错了。有可能做OP想要的,期间。你可以看到它完成here。您可以进行无限循环这一事实并不意味着“一般意义上的循环是不可能的”!!!
    猜你喜欢
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-07
    • 2013-01-25
    • 1970-01-01
    相关资源
    最近更新 更多