zoukankan      html  css  js  c++  java
  • 正则表达式学习(1)

    正则表达式的学习思维是怎样的?完整的正则表达式是由小的构建单元组成的,有些构建单元可能很小,实现的功能很简单,很无趣,但却代表某一类实现,等集成到大需求里,就显示出他的重要性。

    比如,要养成按照字符思考问题的习惯,举例:

    ^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
    '
    print(mystr3)
    list123=re.findall('H[^123456]',mystr3)
    print(list123)
    H
    
    ['H
    ']
    
    Process finished with exit code 0

    为啥H后面2个换行?因为print自己也换行,哈。

  • 相关阅读:
    linux设置永久别名
    网站架构
    c#: 判断Firefox是否安装
    似是故人来
    Python: re.sub()第二个参数
    Python: AES加密与解密
    c#: Noto Sans字体如何支持韩文
    Inno Setup安装程序单例运行
    朵朵的二维码
    Python: 浅淡Python中的属性(property)
  • 原文地址:https://www.cnblogs.com/aomi/p/7060949.html
Copyright © 2011-2022 走看看