暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

必备技能之python正则表达式(二)

运维家 2022-03-01
352

声明:本文乃“运维家”原创,转载请注明出处,更多内容请关注公众号“运维家”。


主旨

上一篇文章中我们介绍了python部分常用的正则表达式,这一节我们就看看如何在python中进行使用,这里我们借助re模块来实现。

环境
    linux 环境
    python3.0+ 环境

    PS:如果不知道如何在linux上安装python3.0以上的版本,在公众号“运维家”后台回复“103”,即可获取安装操作手册。


    match

    match() 函数试图从字符串的起始部分对模式进行匹配。如果匹配成功就返回一个匹配对象;如果匹配失败,就返回none,匹配对象的group()方法能够用于显示那个成功的匹配。
      # 成功的匹配-示例1
      >>> import re
      >>> m = re.match('abc', 'abc')
      >>> if m is not None:
      ... m.group()
      ...
      'abc'
      >>>


      # 成功的匹配-示例2
      >>> import re
      >>> m = re.match('abc', 'abcd')
      >>> if m is not None:
      ... m.group()
      ...
      'abc'
      >>>




      # 失败的匹配
      >>> import re
      >>> m = re.match('abc', 'nihaobc')
      >>> if m is not None:
      ... m.group()
      ...
      >>>

      search

      search()的工作方式与match()完全一致,不同之处在于search()会用它的字符串参数,在任意位置对给定正则表达式模式搜索第一次出现的匹配情况。

      通过下面的例子可以看出search和match之间的差异

        >>> import re
        >>> m = re.match('abc', 'oooabcppp')
        >>> if m is not None:
        ... m.group()
        ...
        >>> import re
        >>> m = re.search('abc', 'oooabcppp')
        >>> if m is not None:
        ... m.group()
        ...
        'abc'
        >>>

        从以上示例中我们可以看到,使用match的时候,是从左边第一个字符进行匹配,所以虽然我们的字符中确实包括了abc字样,但是由于不是左边第一个字符,所以没有匹配到。那么,当我们使用search的时候,他会按照从左往右的顺序,匹配在字符串中第一次出现的位置。

        什么意思?你是说如果被匹配的字符串中有多个符合的内容,也只会匹配一个嘛?我们看看下面的示例就明白了。

          >>> import re
          >>> m = re.search('abc', 'oooabcpppabcd')
          >>> if m is not None:
          ... m.group()
          ...
          'abc'
          >>>

          从上面的示例中我们就知道答案了吧,确实只会匹配第一个。如果匹配到了,就结束了该次匹配。


          匹配多个字符串

          在上一节中,我们使用正则表达式的择一匹配符,下面我们就演示下如何在python使用该方法。

            # 示例1
            >>> ywj = 'aa|bb|cc'
            >>> m = re.match(ywj, 'aa')
            >>> if m is not None: m.group()  # 可以匹配到ywj中的aa
            ...
            'aa'
            >>>


            # 示例2
            >>> ywj = 'aa|bb|cc'
            >>> m = re.match(ywj, 'ccnihao')
            >>> if m is not None: m.group()  # 可以匹配到ywj中的cc
            ...
            'cc'
            >>>


            示例3
            >>> ywj = 'aa|bb|cc'
            >>> m = re.search(ywj, 'My name is gcc')
            >>> if m is not None: m.group() # 通过search方式来匹配cc
            ...
            'cc'
            >>>

            匹配任何单个字符

            在上一篇中我们说了点号(.)可以匹配任何字符,我们现在就用它进行匹配。

              >>> ywj = '.ni' 
              >>> m = re.match(ywj, 'aniya')
              >>> if m is not None: m.group()
              ...
              'ani'
              >>>

              那么是否还记得上一篇我们说的,以何种方式匹配这个点号(.)呢?

                >>> ywj = 'a\.b'            
                >>> m = re.search(ywj, 'nia.b')
                >>> if m is not None: m.group()
                ...
                'a.b'
                >>>

                当然是使用我们的转义符"\"了。


                不知道有没有小伙伴在输入上面内容的时候,觉得python自带的ide非常不好使,位置调整都不可以,那么有没有可以在命令行中自由的输入信息,而且也可以进行命令提示呢?就像我们使用pycharm一样,你输入前面几个字母,后面就可以带出来和他相关的所有命令,因为我实在是觉得这个python自带的太难用了,下一节我们就介绍下如何进行配置支持自动补全,自动说明的python方式。

                老板们,点个关注哦~
                文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论