如何找到给定正则表达式生成的最小,最大长度字符串?

时间:2014-02-27 23:50:37

标签: python regex min maxlength minmax

如何在正则表达式下找到最小和最大长度?

例如

[1-9]?[0-9]

此正则表达式可以生成最小1(0或1 0r 2 ....或9)和最大字符串长度2(10或11或12或...... 19或20或21。 ..........或99)

同样,任何人都可以提供一个函数,可以计算正则表达式的最小和最大长度吗? 哪个可以作为输入以下正则表达式?

^[a-zA-Z0-9][a-zA-Z0-9.-]{0,64}[a-zA-Z0-9]$
^[a-zA-Z0-9._-]{1,255}$
^[a-zA-Z0-9 !#$'()*+,./:;=?@\\^_`~-]{1,30}$
^[]a-zA-Z0-9 !#$'()*+,./:;=?@[^_`{|}~-]{0,50}$
^((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])$

3 个答案:

答案 0 :(得分:5)

正则表达式只包含一小部分元素。

  1. 原子(例如a[a-k].),
  2. 选择(例如r1|r2),
  3. 重复(例如r{3,10}r+r*r?)。
  4. 群组(例如(r)),可以重复或选择。
  5. 特价(例如^$)。
  6. 除非我们想要添加非消费前瞻和类似内容,否则它或多或少是它,但它们不是您的示例输入的一部分,因此我不会考虑这些。

    这些可以多久(最小/最大)?

    1. 1/1(原子大小不变)
    2. min(minlen(r)for r in choices)/ max(maxlen(r)for r in choices)
    3. minlen(r)* minrepretition / maxlen(r)* maxrepetition
    4. minlen(r)/ maxlen(r)
    5. 0(位置参数与空字符串匹配)。
    6. 所以,你需要的是一个正则表达式解析器(正如Hugh Bothwell在他的回答中所建议的那样),它返回给你某个给定正则表达式的抽象语法树(absy);然后可以使用我在上面概述的规则来分析这个有用的正则表达式可以匹配的字符串的最小或最大长度。

答案 1 :(得分:4)

http://pyparsing.wikispaces.com/file/view/invRegex.py处有一些起始代码用于pyparsing中的正则表达式解析器;不应该很难修改你想要的东西。

可以在http://pyparsing.wikispaces.com/Examples

找到一些教程

答案 2 :(得分:2)

看起来你需要构建一个正则表达式解析器来解析这些正则表达式并为你计算。将括号视为单个字符,将括号视为变量len,将|视为更多可变性的东西。看起来你面前有很多功课。祝你好运!

编辑,一些额外的帮助。

好的,这里有一点可能让你开始:

这个正则表达式,例如:

^[a-zA-Z0-9 !#$'()*+,./:;=?@\\^_`~-]{1,30}$
^^--------one of these characters--^^----^^-end of string
^---start of string                   ^one to thirty times

所以这个正则表达式的长度为1到30个字符。

这有帮助吗?但是说真的,我不会做更多的事情,你需要阅读文档:http://docs.python.org/library/re.html