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