亲宝软件园·资讯

展开

Python 正则 re.compile

笑笑布丁 人气:0

背景:我在爬虫处理某个文本时,用到了re.findall(),而不是re.compile。远在新加坡的同事提出了质疑,认为以我的水平,不应该写出这样影响性能的代码,让我优化一下。我提出了反驳:既然使用了Python,就不应该太过考虑性能的问题,如果要考虑性能就使用C语言,而不是Python.他接着说:正是因为python性能不够,所以更应该考虑代码的优化,能做好就应该做到最好.最后,我没有回话,当然我也没有进行所谓的优化,以下我会给出我自己的观点.

re.compile()、re.findall()、re.search() 的作用与区别

1、re.compile()

Python里的re是支持正则表达式的模块,所谓的正则表达式就是匹配文本里符合条件的语句. re.compile()是根据包含正则表达式的字符串创建模式对象,以提高匹配效率.例如:

def test():
    regex = r'(\d+) years old'
    content = 'Alex is a 7 years old boy.'
    reg = re.compile(regex)
    result = re.search(reg, content).group()
    print(result)
result = 7

2、re.search()

re.search()是在字符串开启查找模式,如其名:search.例如:

def test():
    content = 'Alex is a 7 years old boy.'
    result = re.search(r'(\d+) years old', content).group()
    print(result)
result = 7

3、re.findall()

re.findall()是返回一个列表,列表里包含了所有符合条件的结果,例如:

def test():
    content = 'Alex is a 7 years old boy.Bob is a 12 years old boy...'
    result = re.findall(r'(\d+) years old', content)
    print(result)
result = ['7', '12']

我们分歧在他认为我应该先用 re.complile 编译好正则之后,再匹配,正如我在re.compile举得例子. 你会说他说的没错啊,作者不应该顺从同事这个合理的要求,不改就算了还要在这里发文BB.我想说的是 抛开剂量谈毒性,都是耍流氓。对于数据来说抛开量级谈性能差异,都是耍流氓. 如果要处理的 文本是百万、千万、亿这个级别,我会做优化,但是对于个别刚上万的数据来说,我觉得没必要,业务流程真的不缺那0.0X秒,多写一行re.compile的时间远大于提示的时间了. 做好代码的优化很重要,特别是面对大量数据的时候,但是我们要想清楚,有时候并不是靠那几行re.compile就能提高多大的性能,精简流程,合理的设计模式才是重点. 工作中还是要做好和同事的沟通,不要和我一样,不然迟早会被别人唾弃.

在这里插入图片描述

在这里插入图片描述

根据下面评论的提示re.compile()那一行应该放在迭代外面的代码块里,相比图中的时间速度会有所提升.

加载全部内容

相关教程
猜你喜欢
用户评论