Python 可以描述字符串的正则表达式

Python 可以描述字符串的正则表达式,python,regex,Python,Regex,我有一个字母{A,B,C},在这个字母表上有大量的单词: aaabbccccaa、ABBBCCC、BBBBCACAC等(不同长度、不同组合) 我正在寻找一组能够描述这些单词的正则表达式(越小越好)。我喜欢紧凑型((BC)+胜过BCBC)。这不是家庭作业 做这件事的好方法是什么 是否有一个Python包已经做到了这一点 我发现他有亲戚关系 更新:当我说我更喜欢(BC)+而不是BCBC时,我可能会仓促行事。我更喜欢尽可能少的表达式(在最坏的情况下,每个字符串都有一个正则表达式),所以我更喜欢A+、A

我有一个字母
{A,B,C}
,在这个字母表上有大量的单词:
aaabbccccaa、ABBBCCC、BBBBCACAC等
(不同长度、不同组合)

我正在寻找一组能够描述这些单词的正则表达式(越小越好)。我喜欢紧凑型(
(BC)+
胜过
BCBC
)。这不是家庭作业

  • 做这件事的好方法是什么
  • 是否有一个Python包已经做到了这一点
  • 我发现他有亲戚关系


    更新:当我说我更喜欢
    (BC)+
    而不是
    BCBC
    时,我可能会仓促行事。我更喜欢尽可能少的表达式(在最坏的情况下,每个字符串都有一个正则表达式),所以我更喜欢
    A+
    AA
    AA+
    中的一个来描述
    AA
    (例如)应该取决于其他字符串显示的模式。

    如果我正确理解您的问题,您有一个字母表,以及字母表上的字符串列表,您希望构建一个与这些字符串完全匹配的模式

    您可能可以为每个字符串构造一个,从该字符串构造一个,它是所有这些字符串的组合。然后将问题简化为一个简单的问题。然后将NFA转换为模式

    如果您已经创建了一个模式,而不是字符串,这甚至可以工作。但是,不能保证您将获得尽可能小的模式


    我不知道有哪种库可以在Python中操作。

    这里有几种方法可以用这些词处理字符串,但只有第一种方法需要正则表达式:

    strings=['aaabbccccaa','ABBBCCC','BBBBCACAC']
    进口稀土
    对于字符串中的字符串:
    matches=re.findall(r'([A-C]+)',字符串)
    如果匹配:
    打印匹配项[0]
    
    输出:

    aaabbccccaa
    ABBBCCC
    BBCACAC
    
    或者,您也可以使用类似的方法,具体取决于您打算对regex执行什么操作:

    从itertools导入groupby
    结果=[(字符串,[''.join(g)表示k,g表示groupby(字符串)])表示字符串中的字符串]
    打印
    对于结果中的结果:
    打印“{}:{}”。格式(*结果)
    
    输出:

    aaabbccccaa:['AAA','BB','C','A','BB','CCCC','AA']
    ABBBCCC:['A','BBB','CCC']
    BBBBCACAC:['BBBB','C','A','C','A','C']
    
    您的目标是获得一组与单词特别匹配的正则表达式吗?(简单地使用
    [A-C]+
    之类的东西有问题吗?)显然,你可以制作一个
    NFA
    来匹配所有这些字符串,(将其转换为
    DFA
    )最小化它并将其转换为正则表达式,这样它将匹配你的字符串集。@Vulcan是的,我想特别匹配这些单词。我认为DFA+NFA可以做到这一点。@JBernardo我不知道DFA/NFA的方法。我想用
    A+
    替换
    A
    的序列,但意识到这是不够的。