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
Regex 使用pyparsing解析正则表达式列表(字面上)_Regex_Pyparsing - Fatal编程技术网

Regex 使用pyparsing解析正则表达式列表(字面上)

Regex 使用pyparsing解析正则表达式列表(字面上),regex,pyparsing,Regex,Pyparsing,我想解析一个正则表达式列表,计算每个正则表达式在特定文本/字符串中找到匹配项的可能性 例如,在长度为1的字符串中查找“[AB]”应该是大约1/13(仅考虑大写字母) 是否有一个通用的正则表达式解析器,它返回各个位置/备选方案? 我正在考虑获取一个职位列表作为返回(“[AB].a{2}”将产生“[['a','B'],',”,['AA']”) 问题是使用pyparsing解析正则表达式。 简单的正则表达式没有问题,但是当涉及到“替代项”和重复时,我就不知所措了:我发现很难解析像“((A[AB])|(

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

例如,在长度为1的字符串中查找“
[AB]
”应该是大约1/13(仅考虑大写字母)

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

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


有什么想法吗?

模拟而不是计算可能是最好的选择

设置一组具有代表性的文本字符串(语言学家将此集合称为语料库)对于任何给定的正则表达式,找到它匹配的字符串数,然后除以语料库中的字符串总数

你自己的例子给出的“[AB]”的可能性为1/13是基于这种思维方式,使用单大写字母字符串的语料库。通过看到语料库中26个字符串中有两个匹配项,你得到了1/13


创建一个更大的语料库:可能是一组特定长度的字母数字字符串,也可能是一组特定长度的ASCII字符串,或者是您选择的词典。思考什么样的语料库最适合您的目的,是澄清“可能性”的一个好方法。

您使用['a',B']说:或A或B。然后你可以这样说:

'[{'A', ['A', 'B']}, {'A', 'B'}]'
在这里,你用[]来表示“其中一个”,就像用{}来表示“所有这些”

这是一个很糟糕的解释…我会再试一次

[] => Calc de probability: {probability of each term} / {num of terms}
{} => Calc de probability of each term and multiplify all

明白吗?

不久前我写了一段代码()。作为代码高尔夫,大多数答案都有点难以解读。但同样的问题也出现了,人们比我聪明得多。我为你的可能性问题提供了答案,现在我发现你还有第二个问题,关于正则表达式解析器的存在。必须至少有一个这样的解析器,一个Python解析器使用。如果您清楚地将您的问题标记为关于Python内部的问题,您可能会从Python专家那里得到答案。您在pyparsing wiki上看过这个示例吗?感谢这种有趣的方法!但是,我对解析复杂正则表达式的方法感兴趣,而不是评分(这应该是或多或少的琐碎,因为我的一组字母非常有限,它们各自的概率是已知的)…感谢分享这一点,然而我的问题是如何解析复杂的正则表达式并获得正则表达式的各个位置,而不是如何为每个位置打分。。。
[] => Calc de probability: {probability of each term} / {num of terms}
{} => Calc de probability of each term and multiplify all