使用pyparsing来解析正则表达式列表(字面意思)

时间:2010-11-23 19:51:21

标签: regex pyparsing

我想解析正则表达式列表,以计算每个正则表达式在某个文本/字符串中找到匹配项的可能性......

EG。在长度为1的字符串中查找“[AB]”应该是1/13左右(仅考虑大写字母)。

是否有通用的正则表达式解析器,它返回各个位置/备选方案? 我正在考虑将一个职位列表作为回报('[AB].A{2}'会产生'[['A','B'],'.',['AA']')

问题是使用pyparsing解析正则表达式。 简单的正则表达式没有问题,但是当涉及“替代”重复时,我迷失了:我发现很难解析像'((A[AB])|(AB))'这样的嵌套表达式。

有什么想法吗?

2 个答案:

答案 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

理解?