Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从字符串检测或生成正则表达式_Python_Regex - Fatal编程技术网

Python 从字符串检测或生成正则表达式

Python 从字符串检测或生成正则表达式,python,regex,Python,Regex,我想知道是否有任何Python包可以从字符串中检测正则表达式。从概念上讲,这很容易做到,但我想看看是否还有其他人解决了这个问题 在某种程度上,我自己到处看了看,我读了重新打包的文档,但没有找到它,我读了在Stack Overflow上能找到的最好的点击,但也找不到。我在谷歌上搜索过,找到的热门话题是如何使用正则表达式解析字符串。我已经在PyPI中搜索过了,但我能找到的唯一成功的是“regexgen 1.0”,而这似乎没有任何结果 明确地说,我所寻找的是以下内容: def detect_regex

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

在某种程度上,我自己到处看了看,我读了重新打包的文档,但没有找到它,我读了在Stack Overflow上能找到的最好的点击,但也找不到。我在谷歌上搜索过,找到的热门话题是如何使用正则表达式解析字符串。我已经在PyPI中搜索过了,但我能找到的唯一成功的是“regexgen 1.0”,而这似乎没有任何结果

明确地说,我所寻找的是以下内容:

def detect_regex(some_string):
    [does stuff..]
    return regular_expression
如有任何想法,将不胜感激。如果没有,我可以自己写。我只是不想浪费时间重新创造已经完成的东西。谢谢

编辑:
我的问题可能不是很清楚;正则表达式“foo”确实与字符串“foo”匹配,但我的目标如下——给定值为
foo123abc
abc07893bar
xyz8940baz
的三个字符串,返回值将是
^[a-z]+[0-9]+[a-z]+$
。。。假设。因此正则表达式在某种程度上是“通用的”。

非常有限,但有点有趣。仅根据您的示例处理字母和数字。我也很好奇,希望这能给你一个合适的起点:

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]+$

每一个字符串都是一个有效的正则表达式(<代码> fo是与字符串“fo”匹配的正则表达式),所以您需要提供一些您认为一个具有嵌入正则表达式的字符串的例子。@ Chepner,字符串不是“<代码>”((“是否是无效的正则表达式?@Chepner我的问题可能不是很清楚。你完全正确,regex foo与字符串foo匹配。我的目标是:给定三个字符串的值分别为
foo123abc
abc07893bar
xyz8940baz
,返回值将是
^[a-z]+[0-9]+[a-z]+$
…假设链接的问题不是这个问题的重复(我想我的答案是“否”,因为有太多可能的正则表达式匹配任何给定的字符串集)。(哦,事实证明我可以自己重新打开一个问题,而不是投票重新打开它。)谢谢。这就是我的想法。更清楚的是,需要指定正则表达式生成的规则。在您的示例中,正则表达式应该只使用字符和字符串来构建。这就是我计划要做的,感谢您的领先!尽管经过讨论,我不认为这是正确的答案在评论中。如果你不这么认为,请告诉我。