正则表达式学习(1)
2017-06-21 17:50 很大很老实 阅读(203) 评论(0) 编辑 收藏 举报
正则表达式的学习思维是怎样的?完整的正则表达式是由小的构建单元组成的,有些构建单元可能很小,实现的功能很简单,很无趣,但却代表某一类实现,等集成到大需求里,就显示出他的重要性。
比如,要养成按照字符思考问题的习惯,举例:
^cat,不要理解为 以cat开始的一行,而是:以c开头的一行,后面跟着a,再跟着t。
采用字符方式的思考,对下面的问题就很容易理解,比如,在一个长文中,寻找pyhon,但是,又不确定是不是写成了python,也可能写成了pyhton。。。
那就这么去匹配:py[th][th]on
mystr1='i love python,but sometimes,i have a wrong :pyhton,but not pyton' list9=re.findall('py[th][th]on',mystr1) print(list9)
而且,有了这个思维以后,诸如H[123456],就好理解了,是H1,H2,H3,H4,H5,H6之类的意思。当然,也可以简写成H[1-6],注意,这里的连字符‘-’,只有在内部,才是连字符,否则,就是一个普通字符
更进一步,在[]里,^表示非的意思,排他的额意思。H[^1234567]表示啥意思呢?
mystr2='H1,H2,H3,H4,H5,H6,H7,H8,H9,H11,H22,H33,H44,H55,H66,H77,H88' list123=re.findall('H[^123456]',mystr2) print(list123)
结果是什么呢?
['H7', 'H8', 'H9', 'H7', 'H8'] Process finished with exit code 0
很显然,诸如H11,H22之类的,对于匹配来说,根本不需要考虑这么多。因为,我们是按照字符考虑的,H11,我们只考虑H1的情况,一定要记住,字符思考思维!
这里,对于[^123456],要理解为:匹配没有出现在123456中的字符,而不是理解为;匹配不是123456的字符。
举例如下;
mystr3='H' list123=re.findall('H[^123456]',mystr3) print(list123)
这个时候,list123就是[],空。
如果,H包含了换行符等,那就可以找到,比如:
mystr3='H\n' print(mystr3) list123=re.findall('H[^123456]',mystr3) print(list123)
H ['H\n'] Process finished with exit code 0
为啥H后面2个换行?因为print自己也换行,哈。