我正在解析原始日志文件,不得不使用正则表达式,因为逗号分隔符出现在字段中。
20200914 01:38:16,ip-XX-YY-1-202,user,10.0.0.0,978,108421,QUERY,db,'select some random query, that has, commas in it, sometimes and not always quotes either..'
这是maria DB审核日志-我需要选择第8个逗号之后的所有数据库查询。 上面示例的输出为
`'select some random query, that has, commas in it, sometimes and not always quotes either..'`
我正在使用熊猫和.str.extract
处理。我有一个hacky版本,可以匹配第8个逗号之前的所有内容,但不确定如何获取它后面的内容。
答案 0 :(得分:7)
不使用正则表达式的一种方法是使用str.split
:
s.split(",", 8)[-1]
输出:
"'select some random query, that has, commas in it, sometimes and not always quotes either.'"
基准:
%timeit s.split(",", 8)[-1]
# 511 ns ± 46.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit re.search("^(?:[^,]*,){8}(.*)$", s).group(1)
# @41686d6564's comment
# 1.52 µs ± 121 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)