Python , 我有一个正则表达式的列表 和 一个字符串, 我想知道这个字符串满足列表中的哪一个正则表达式, 除了遍历一遍, 有没有更快的方法?

2017-12-12 22:21:37 +08:00
 woshichuanqilz

比如

regex_list = ['a.*', 'b.*'.....]
string = 'test'

for i in regex_list:
	if re.match
		.....

我的代码是这样的, 但是感觉遍历有点慢, 有没有更快的方法去做?

2621 次点击
所在节点    Python
13 条回复
Kilerd
2017-12-12 22:24:26 +08:00
除非你的 regex_list 有某种规律,不然只能是 O(n) 的算法了吧
TJT
2017-12-12 22:39:19 +08:00


仅供参考
TJT
2017-12-12 22:40:56 +08:00
第三行的 merge_reg 应该是 reg_merged,测试的变量
clino
2017-12-12 22:46:18 +08:00
clino
2017-12-12 22:47:05 +08:00
想法是将一个 re 列表合成一个大的 re,然后匹配的时候能够取到 re 列表的 index
xml123
2017-12-12 23:00:18 +08:00
我觉得把正则表达式合并了测试并不会比拆开测省时间。
lrxiao
2017-12-13 01:21:11 +08:00
Dganzh
2017-12-13 09:25:05 +08:00
没有
lieh222
2017-12-13 09:29:45 +08:00
试试周易??
topbandit
2017-12-13 09:33:49 +08:00
试试半分法
linuxchild
2017-12-13 10:37:25 +08:00
@topbandit 正则表达式没有规律不能这么分吧?
xpresslink
2017-12-13 11:37:28 +08:00
楼主的问题本身存在着逻辑矛盾。
你要确定这个字符串满足列表中的哪一个正则表达式,这是个限定性问题。必须完全遍历列表才能确定具体是哪一个或哪几个。如果说定义成一个函数来说,输入参数是一个字符串和一个正则列表,输出是列表中符合的元素内容或其索引位置号。

这个和列表有没有符合的元素是不同的。
这种情况就简单了,输出只有表示 是 /否 或 True/False 就可以了。
如果是遍历的方法,只要碰到第一个满足条件的元素,就可以 return True 了.
那种把表达式合并的方法只能满足这种要求。

所以楼主你自己先要把自己的需求想清楚了.
lniwn
2017-12-18 11:21:28 +08:00
可以先对 re 列表进行分类,比如,以字母开头的,以数字开头的,以符号结尾的,包含 xx 符号的。分完类之后,再分析目标字符串,看属于哪一类,最坏的情况也只是遍历某一类 re 中的所有项

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/414224

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX