【发布时间】:2012-04-10 21:27:29
【问题描述】:
我正在尝试实现文本聚类算法。该算法通过用正则表达式替换相似的原始文本行来对它们进行聚类,并聚合与每个正则表达式匹配的模式数量,以便提供输入文本的简洁摘要,而不是显示输入文本中的重复模式。在这次尝试中,我遇到了需要找出一个正则表达式是否涵盖另一个。
假设我们只关注带有“*”和“+”通配符的正则表达式,即“*”表示字母表出现零次或多次,“+”表示出现1次或多次的字母表。还假设字符集是 ASCII。
例如:
1. AB covers AB
This is straightforward.
2. ABC* covers ABC
Because ABC* can generate: ABC, ABCC, ABCCC etc.
3. A*B+C* covers AB+C*
Because A*B+C* can generate ABBC, AABBC, AABBCC etc. which covers
all strings generated by AB+C*.
4. A+M+BC* covers AMM+B+C+M+BC*
Similar to case [3] above.
基本上,我正在寻找以下方法的有效实现,该方法告诉 strA(可能包含正则表达式)是否涵盖 strB(可能包含正则表达式)。请注意,还应该有一种方法可以转义输入字符串 strA 和 strB 中的正则表达式字符“*”和“+”。
C++ 中的方法签名:
bool isParentRegex(const string& strA, const string& strB)
我的想法是实现需要递归方法,它可能有点复杂。但我很想知道我是否可以重用现有的实现而不是重新发明轮子,或者是否有任何其他直接的方法可以做到这一点。
【问题讨论】:
-
像大多数事情一样,这在 Perl 中会更容易。 :-)
-
@JarrodRoberson:不,这是关于重叠(是否有 any 输入),这是一个子集问题。
标签: c++ regex data-mining cluster-analysis