比如
regex_list = ['a.*', 'b.*'.....]
string = 'test'
for i in regex_list:
if re.match
.....
我的代码是这样的, 但是感觉遍历有点慢, 有没有更快的方法去做?
1
Kilerd 2017-12-12 22:24:26 +08:00
除非你的 regex_list 有某种规律,不然只能是 O(n) 的算法了吧
|
2
TJT 2017-12-12 22:39:19 +08:00
仅供参考 |
3
TJT 2017-12-12 22:40:56 +08:00
第三行的 merge_reg 应该是 reg_merged,测试的变量
|
4
clino 2017-12-12 22:46:18 +08:00
|
5
clino 2017-12-12 22:47:05 +08:00
想法是将一个 re 列表合成一个大的 re,然后匹配的时候能够取到 re 列表的 index
|
6
xml123 2017-12-12 23:00:18 +08:00
我觉得把正则表达式合并了测试并不会比拆开测省时间。
|
7
lrxiao 2017-12-13 01:21:11 +08:00
|
8
Dganzh 2017-12-13 09:25:05 +08:00
没有
|
9
lieh222 2017-12-13 09:29:45 +08:00
试试周易??
|
10
topbandit 2017-12-13 09:33:49 +08:00
试试半分法
|
11
linuxchild 2017-12-13 10:37:25 +08:00
@topbandit 正则表达式没有规律不能这么分吧?
|
12
xpresslink 2017-12-13 11:37:28 +08:00
楼主的问题本身存在着逻辑矛盾。
你要确定这个字符串满足列表中的哪一个正则表达式,这是个限定性问题。必须完全遍历列表才能确定具体是哪一个或哪几个。如果说定义成一个函数来说,输入参数是一个字符串和一个正则列表,输出是列表中符合的元素内容或其索引位置号。 这个和列表有没有符合的元素是不同的。 这种情况就简单了,输出只有表示 是 /否 或 True/False 就可以了。 如果是遍历的方法,只要碰到第一个满足条件的元素,就可以 return True 了. 那种把表达式合并的方法只能满足这种要求。 所以楼主你自己先要把自己的需求想清楚了. |
13
lniwn 2017-12-18 11:21:28 +08:00 via iPhone
可以先对 re 列表进行分类,比如,以字母开头的,以数字开头的,以符号结尾的,包含 xx 符号的。分完类之后,再分析目标字符串,看属于哪一类,最坏的情况也只是遍历某一类 re 中的所有项
|