小编Eul*_*lie的帖子

python加速这个正则表达式子

p = re.compile('>.*\n')
p.sub('', text)
Run Code Online (Sandbox Code Playgroud)

我想删除所有以'>'开头的行.我有一个非常大的文件(3GB),我处理大小为250MB的块,所以变量"text"是一个250MB的字符串.(我尝试了不同的大小,但整个文件的性能始终相同).

现在,我可以以某种方式加速这个正则表达式吗?我尝试了多行匹配,但速度慢了很多.还是有更好的方法?

(我已经尝试拆分字符串然后过滤掉这样的行,但它也慢了(我也试过一个lambda而不是def del_line :(可能不是工作代码,它只是来自内存):

def del_line(x): return x[0] != '>'

def func():
    ....
    text = file.readlines(chunksize)
    text = filter(del_line, text)
    ... 
Run Code Online (Sandbox Code Playgroud)

编辑:正如评论中所建议的那样,我也尝试逐行行走:

text = []
for line in file:
    if line[0] != '>':
        text.append(line)
text = ''.join(text)
Run Code Online (Sandbox Code Playgroud)

那也慢,需要~12秒.我的正则表达需要~7秒.(是的,这很快,但它也必须在较慢的机器上运行)

编辑:当然,我也试过str.startswith('>'),它更慢......

python regex

6
推荐指数
1
解决办法
189
查看次数

python regex:获取命名组的名称

我有这样的事情:

$ pattern = re.compile('(?P<group1>AAA|BBB|CCC)|(?P<group2>DDD|EEE|FFF)')
Run Code Online (Sandbox Code Playgroud)

如果我正在查看匹配对象,我真的不感兴趣匹配哪个特定文本,我只想知道它是group1还是group2

groupdict()给我这样的东西:

$ match.groupdict()
$ {'group1': None, 'group2': 'DDD'}
Run Code Online (Sandbox Code Playgroud)

现在,当然,我可以通过迭代dict来发现它是group2,但是如果我有很多匹配要检查的话,那似乎很慢.是否有更直接的方式来获取组名?(Python 2.7)

python regex

5
推荐指数
1
解决办法
1098
查看次数

标签 统计

python ×2

regex ×2