![]() |
1
16
这个 Aho-Corasick 匹配算法构造一个有限自动机来匹配多个字符串。您可以将自动机转换为等效的regex,但是直接使用自动机更简单(这就是算法所做的) |
![]() |
2
8
|
![]() |
3
3
|
![]() |
4
2
trie ,或 compressed trie ,甚至更好 directed acyclic word graph 不过,您必须放弃regexp。 |
![]() |
5
1
我认为退一步想想你在做什么,以及为什么这样做是有意义的。
如果您确实需要regexp,那么您试图适应的变量差异是什么?也就是说,输入的哪一部分必须逐字匹配,哪里有回旋余地? 如果您真的想使用regexp来匹配一个固定的字符串列表,也许是出于性能原因,那么编写一个将所有输入字符串粘在一起的方法应该足够简单,就像您的示例中那样。在后台进行regexp匹配的状态机非常聪明,如果您的匹配备选方案具有公共(因此可能是冗余的)子字符串,则不会运行得更慢。 |
![]() |
6
1
从另外两个答案中得到提示,您只需要匹配所提供的字符串,您最好直接进行字符串匹配(慢)或构造一个简单的FSM来匹配这些字符串(快)。 regex实际上创建了一个FSM,然后将您的输入与之匹配,因此如果输入来自一组以前已知的集合,那么您可以自己创建FSM,而不是尝试自动生成regex,这通常更容易。 Trie 然后查询它(因为您匹配的是整个字符串,而不是子字符串)? |
![]() |
7
0
一种简单的方法是使用Python的 hachoir_regex 模块:
创建简化正则表达式
代码首先为每个URL创建一个简单的regex类型,然后用
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |