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
)。这不是家庭作业
更新:当我说我更喜欢
(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
的序列,但意识到这是不够的。