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类型,然后用
|
lonix · 使用sed从JSON中提取非贪婪正则表达式 1 年前 |
Dima Malko · 如何在指定符号前添加符号? 2 年前 |
shekharsabale · 从列表元素捕获子字符串 2 年前 |
Katia · 根据特定规则进行多行匹配 2 年前 |
MHA · Pandas str.extract()以字母结尾的数字 2 年前 |
Slava Vir · 如何查找后面“/”之间的最后一组 2 年前 |