我想解析正则表达式列表,以计算每个正则表达式在某个文本/字符串中找到匹配项的可能性......
EG。在长度为1的字符串中查找“[AB]
”应该是1/13左右(仅考虑大写字母)。
是否有通用的正则表达式解析器,它返回各个位置/备选方案?
我正在考虑将一个职位列表作为回报('[AB].A{2}
'会产生'[['A','B'],'.',['AA']
')
问题是使用pyparsing解析正则表达式。
简单的正则表达式没有问题,但是当涉及“替代”和重复时,我迷失了:我发现很难解析像'((A[AB])|(AB))
'这样的嵌套表达式。
有什么想法吗?
答案 0 :(得分:2)
模拟而非计算可能是最佳选择。
设置一组代表性文本字符串。 (语言学家会将这样的集合称为语料库。)对于任何给定的正则表达式,找到它匹配的字符串数,并除以语料库中的字符串总数。
你自己的例子给出'[AB]'作为1/13的可能性是基于这种思维方式,使用单大写字母字符串的语料库。你看到在语料库中的26个字符串中有两个匹配,你得到1/13。
创建一个更大的语料库:可能是一组长度达到一定长度的所有字母数字字符串,或者所有长度达到一定长度的ASCII字符串,或者您选择的字典。考虑哪种语料库最适合您的目的是一种很好的方式来澄清“可能性”的含义。
答案 1 :(得分:0)
你用['A','B']来说:或者A或B.然后你可以放一些这样的东西:
'[{'A', ['A', 'B']}, {'A', 'B'}]'
在那里你使用[]来“使用其中一个”作为使用{}来“所有这些”
1/2 to '{'A', ['A', 'B']}'
'A' => 1/1
['A', 'B'] => 1/2
(1/1) * (1/2) = 1/2
this (1/2) times the extern (1/2) = (1/4)
1/2 to '{'A', 'B'}' -> (1/26) to each.
Multiplify two times: 1/(26^2) and multiplify by the 1/2 = (1/(26^2))/2.
Now multiplify both: (1/4) * ((1/(26^2))/2)
这是一个非常糟糕的解释......我会重试......
[] => Calc de probability: {probability of each term} / {num of terms}
{} => Calc de probability of each term and multiplify all
理解?