从String中检测或生成正则表达式

时间:2015-07-06 19:31:18

标签: python regex

我想知道是否有任何Python包来检测字符串中的正则表达式。从概念上讲,这很容易做到,但我想看看是否还有其他人解决了这个问题。

就我自己环顾四周而言,我已经阅读了重新包文档并且没有找到它,我读了Stack Overflow上找到的最好的点击,但也找不到。我用谷歌搜索它,我发现的命中是如何使用正则表达式来解析字符串。我已经通过PyPI进行了搜索,但我能找到的唯一一个是'regexgen 1.0'并且它似乎没有任何领先地位......

要清楚,我正在寻找的是:

def detect_regex(some_string):
    [does stuff..]
    return regular_expression

我们将非常感谢您的想法。如果没有,我可以自己写。我只是不想浪费时间重新创造已经完成的工作。谢谢!

编辑: 在我的问题中,我可能不太清楚;正则表达式'foo'匹配字符串'foo',但我的目标如下 - 给定值为foo123abcabc078963barxyz8940baz的三个字符串,返回值为{ {1}} ...假设。所以正则表达式在某种程度上是“一般的”。

1 个答案:

答案 0 :(得分:0)

非常有限,但有点乐趣。只处理alpha和数字。也很好奇。

def auto_re(text):
    cur = first = str.isalpha(text[0])
    count = 0

    for letter in text:
        if str.isalpha(letter) != cur:
            cur = not cur
            count += 1

    modes = ["[0-9]+", "[a-z]+"]
    return "^" + modes[first] + (count/2) * (modes[not first ] + modes[first]) + (count%2) * (modes[not first]) + "$"


tests = ["foo123abc", "abc078963bar", "xyz8940baz", "1a", "a1", "1a2b3c", "a12b3c"]

for test in tests:
    print "%-20s %s" % (test, auto_re(test))

提供以下输出:

foo123abc            ^[a-z]+[0-9]+[a-z]+$
abc078963bar         ^[a-z]+[0-9]+[a-z]+$
xyz8940baz           ^[a-z]+[0-9]+[a-z]+$
1a                   ^[0-9]+[a-z]+$
a1                   ^[a-z]+[0-9]+$
1a2b3c               ^[0-9]+[a-z]+[0-9]+[a-z]+[0-9]+[a-z]+$
a12b3c               ^[a-z]+[0-9]+[a-z]+[0-9]+[a-z]+$