#python 正则表达式 手动调用re.compile()是否有必要#
-
前两天老师讲到了正则表达式的使用,其中re.compile()总让人觉得不舒服,明明可以
import re words='asd 123 aaaf found 张三 404 沈圳' rules=r'[\u4e00-\u9fa5]' res=re.findall(rules,words)
却非要
import re words='asd 123 aaaf found 张三 404 沈圳' rules=re.compile(r'[\u4e00-\u9fa5]') res=re.findall(rules,words)
这时候有人给我解释说:当有非常多条字符串同时需要同一个正则表达式去匹配的时候,使用第二种方式是正确的。假如使用第一种,就相当于你把一段正则表达式无形中re.compile()了很多次!
嗯,这个解释看上去有道理,那就这样了?
不存在的
2.这种说法在一些语言中确实是对的,就是说java,但是在python中,确实不需要手动调用re.compile()
-
打开Pycharm,在py文件中输入
import re
re.findall -
按住ctrl键点击’findall‘,查看
同时常用的还有 match,search等,也继续看
所以说,我们常用的正则表达式方法,在python里都是标配有compile的,无需多劳去调用re.compile() -
继续去看_compile()
也就是说,_compile会自带缓存,存由‘type(pattern),pattern,flags’组成的key值
也就是说,当你在用同一个正则表达式去多次匹配的时候,flag相同,它会自动去调用缓存里面的compile()的结果,而无需像java那样 在一开始手动去调用re.compile()。
说实话,我之前觉得这样的行为毫无意义。但是最近在一篇篇的读一位前辈的博客,现在觉得,这也是小白前进路上的乐趣吧。
附上前辈 :www.kingname.info
本篇也是他针对这个问题的解释。