尝试改进下面的正则表达式:
urlpath=columns[4].strip()
urlpath=re.sub("(\?.*|\/[0-9a-f]{24})","",urlpath)
urlpath=re.sub("\/[0-9\/]*","/",urlpath)
urlpath=re.sub("\;.*","",urlpath)
urlpath=re.sub("\/",".",urlpath)
urlpath=re.sub("\.api","api",urlpath)
if urlpath in dlatency:
这将转换一个URL,如下所示:
/api/v4/path/apiCallTwo?host=wApp&trackId=1347158
到
api.v4.path.apiCallTwo
想尝试和提高regex尽可能的性能,因为每5分钟这个脚本运行约50,000个文件,需要约40秒的整体运行。
谢谢
6条答案
按热度按时间bgibtngc1#
试试这个:
要获得更好的性能,请编译一次正则表达式,然后重用它,如下所示:
更简单的方法,不使用正则表达式:
c9qzyr3d2#
包含urlparse的单行程序:
txu3uszq3#
这是我的一行解决方案(编辑)。
正如其他一些人所提到的,速度的提高在这里可以忽略不计。除了使用re.compile()预编译表达式外,我会从其他地方开始寻找。
结果
如果不对5个正则表达式进行重新编译,将导致
koaltpgm4#
一行一行地检查:
我们没有捕获或分组,所以不需要
(
和)
,并且/
在Python的正则表达式中不是特殊字符,所以不需要转义:urlpath = re.sub("\?.*|/[0-9a-f]{24}", "", urlpath)
用
/
替换/
后面的零重复内容是没有意义的:urlpath = re.sub("/[0-9/]+", "/", urlpath)
使用字符串方法删除固定字符及其后面的所有内容的速度更快:
urlpath = urlpath.partition(";")[0]
使用字符串方法将一个固定字符串替换为另一个固定字符串的速度也更快:
urlpath = urlpath.replace("/", ".")
urlpath = urlpath.replace(".api", "api")
tyky79it5#
您还可以编译re语句来提高性能,
例如:
xzv2uavs6#
你确定你需要正则表达式吗?
即: