• python 正则表达式


    正则表达式(re---regular expression)

    1.作用:精确匹配或者模糊匹配

    比如:匹配所有日志中的ip,匹配所有的响应时间。

    2.match从开头匹配

    正则表达式的写法

    >>> import re---引入正则的包

    >>> re.match(r'1','1abc')---使用mtch匹配

    >>> import re

    >>> re.match(r'1','1abc')

    <_sre.SRE_Match object; span=(0, 1), match='1'>

    >>> print(re.match(r'1','abc'))

    None

    查看类型

    >>> type(re.match(r'1','1abc'))

    <class '_sre.SRE_Match'>

    >>> 

    匹配0-9范围内的数字。d表示digit

    >>> print(re.match('d','9abc'))

    <_sre.SRE_Match object; span=(0, 1), match='9'>

    >>> print(re.match('\d','9abc'))

    <_sre.SRE_Match object; span=(0, 1), match='9'>

    >>> 

    3.search是从整个字符串任意位置取一位

    >>> re.search(r'd','abcd1ed')

    <_sre.SRE_Match object; span=(4, 5), match='1'>

    >>> 

    group()可以打印所有正则表达式匹配的内容---这个是匹配1个数字

    >>> re.search(r'd','abcd1ed').group()

    '1'

    >>> re.search(r'd+','abcd12ed').group()----匹配多个数字,后面使用+  

    '12'

    把所有匹配的内容打印出来。findall可以实现多个结果的匹配

    >>> re.findall(r'd','a1b2c3d4')

    ['1', '2', '3', '4']

    匹配一个非数字

    >>> re.search(r'D','1232R4AADFDa').group()

    'R'

    >>> 

    匹配多个非数字

    >>> re.search(r"D+","12343abc123ed").group()

    'abc'

    匹配数字和英文

    >>> re.search(r"w+","113eddd").group()

    '113eddd'

    匹配非数字和字母

    >>> re.search(r"W+","113eddd!$EDDD").group()

    '!$'

    匹配空白--空白包括     空格 

    >>> re.search(r"s+","113eddd ").group()

    ' '

    S表示匹配非空白

    >>> re.search(r"S+","113eddd ").group()

    '113eddd'

    +表示匹配1个或多个

    *表示匹配0个或多个

    正则表达式的贪婪性:尽量多匹配

    >>> re.match(r'w*','abc').group()

    'abc'

    这段' abc'.''中开头的是一个空格,match要求''中第一个字符就需要匹配上,符合正则的规则。所以报错了

    >>> re.match('rw*',' abc').group()

    Traceback (most recent call last):

      File "<pyshell#26>", line 1, in <module>

        re.match('rw*',' abc').group()

    AttributeError: 'NoneType' object has no attribute 'group'

    >>> print(re.match(r'w','abc'))

    None

    >>> print(re.match(r'w','abc').group())

    Traceback (most recent call last):

      File "<pyshell#30>", line 1, in <module>

       print(re.match(r'w','abc').group())

    AttributeError: 'NoneType' object has no attribute 'group'

    >>> 

    非贪婪模式:在  +  * 后面加上?

    >>> re.match(r'w+?','abc').group()

    'a'

    贪婪模式

    >>> re.match(r'w+','abc').group()

    'abc'

    >>> 

    限制最小匹配次数,加了?就是最小匹配。*表示匹配0次或者多次,'abc'中第一个是a.不符合条件。匹配结果是空. w和*的范围重复了

    >>> re.match(r"w*?","abc").group()

    ''

    改一下范围就行了

    ‘>>> re.match(r"w+","abc").group()

    'abc’

    指定匹配内容的具体个数

    匹配4个a
    >>> re.search(r'a{4}','aaaa').group()

    'aaaa'

    匹配3个a

    >>> re.search(r'a{1,3}','aaaa').group()

    'aaa'

    加个?限制正则的贪婪性

    >>> re.search(r'a{1,3}?','aaaa').group()

    'a'

    >>> re.search(r'a{1,3}','aa').group()

    'aa'

    如果被匹配的''中个数少了,会匹配不上

    >>> re.search(r'a{4}','aa').group()

    Traceback (most recent call last):

      File "<pyshell#40>", line 1, in <module>

       re.search(r'a{4}','aa').group()

    Attribute

    如果被匹配的''中个数多了,可以正常匹配

    >>> re.search(r'a{4}','aaaaaaa').group()

    'aaaa'

    判断字符串中是否有数字

    >>> s='12af'

    >>> if re.search(r'd',s):

             print('字符串有数字')

    else:

             print('字符串中没有数字')

            

    字符串有数字

    >>> 

    练习

    判断一个字符串中是否有连续的5个数字

    import re

    s='12456af'

       

    if re.search(r'd{5}',s):

       print('字符串有连续的5个数字')

    else:

       print('字符串中没有数字')

    指定一个字母的范围----|是与的关系

    >>> re.search(r'ab|cd','abc').group()

    'ab'

    []是或的关系

    >>> re.search(r'[ab]','abc').group()

    'a'

    ?匹配0次或者1次

    >>> s='1abc'

    >>> re.match(r'1?',s).group()

    '1'

    >>> re.match(r'1?','abc').group()

    ''

    匹配1个

    >>> re.match(r"d?","1233abc").group()

    '1'

    匹配多个

    >>> re.match(r"d*","1233abc").group()

    '1233'

    正则表达式中使用()的方式叫做分组

    >>> re.search(r'a(d+)c','a11243c')

    <_sre.SRE_Match object; span=(0, 7), match='a11243c'>

    >>> re.search(r"a(d+)c","a11243c").group(1)

    '11243'

    匹配第1个()中的值

    >>> re.search(r"(a)(d+)(c)","a11243c").group(1)

    'a'

    匹配第2个()中的值

    >>> re.search(r"(a)(d+)(c)","a11243c").group(2)

    '11243'

    匹配第3个()中的值

    >>> re.search(r"(a)(d+)(c)","a11243c").group(3)

    'c'

    re.match(r"1","1b")  匹配对象,匹配到后,就不在向后匹配了

    re.match(r"1","0b")  None,第一个就没匹配上,就不在向后匹配了

    re.search(r"1","ab1d") 匹配对象,就不在向后匹配了

    re.search(r"1","abcd") None,把所有的字符串内容扫描一遍

    re.search(r"d+","ab113d") 匹配对象113,就不在向后匹配了

    re.I表示忽略大小写

    >>> re.match(r"a","Abc",re.I)

    <_sre.SRE_Match object; span=(0, 1), match='A'>

    >>> re.search(r'.','abcd').group()

    'a'

    >>> re.search(r'.','2abcd').group()

    '2'

    >>> re.search(r'.',' 2abd').group()

    '2'

    >>> re.search(r'.',' abd').group()

    'a'

    >>> re.search(r'.',' abd').group()

    ' '

    >>> re.match(r'\','\').group()

    '\'

  • 相关阅读:
    (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中
    (3)Maven快速入门_3在Eclipse中创建Maven项目打包成jar
    (2)Maven快速入门_2maven在Eclipse中的设置
    (1)Maven快速入门_1maven安装
    (11)Microsoft office Word 2013版本操作入门_word中表格操作
    (10)Microsoft office Word 2013版本操作入门_word表格
    洛谷 P2144 [FJOI2007]轮状病毒
    洛谷 P2234 [HNOI2002]营业额统计
    【模板】主席树
    洛谷 P2572 [SCOI2010]序列操作
  • 原文地址:https://www.cnblogs.com/liyujie1978/p/9599028.html
Copyright © 2020-2023  润新知