zoukankan      html  css  js  c++  java
  • python正则表达式之使用规则

         正则表达式在我看来是提供一个模板,将待匹配的字符串与模板匹配,匹配不到则返回为空,匹配成功根据需要返回匹配的字符串。

    正则表达式比字符串本身的功能要强一点,当然性能上略有不如。

        我们使用正则表达式主要有两种目的,

           是否包含模板字符串;

           > 得到匹配字符串。

         python 中使用正则表达式时需要引入“re”模块,为了避免记忆上的混乱,本文只记载一种最常用的使用正则表达式的方式。

    使用流程:

     1 # encoding:utf-8
     2 
     3 # 引入re模块
     4 import re
     5 
     6 #生成正则表达式模板
     7 pat = re.compile(r'12')
     8 
     9 #匹配结果
    10 m=pat.search("123 12")
    11 print m
    12 
    13 #匹配结果
    14 m=pat.search("3 2")
    15 print m
    16 
    17 # 输出:
    18 # <_sre.SRE_Match object at 0x01FCFB48>
    19 # None

    match()和search()区别

    在一些示例中,在匹配结果也会用到match方法,match和search的区别如下:

             match :只从字符串的开始与正则表达式匹配,匹配成功返回matchobject,否则返回none;

       search :将字符串的所有字串尝试与正则表达式匹配,如果所有的字串都没有匹配成功,返回none,否则返回matchobject;

    示例如下:

    pat = re.compile(r'12')
    
    m=pat.search("312")
    print m
    # <_sre.SRE_Match object at 0x01FCFB48>
    
    m=pat.match("312")
    print m
    # None
    
    m=pat.match("123")
    print m
    # <_sre.SRE_Match object at 0x01FCFB48>

    分组的概念和findall()

    当我们想将符合正则规则的字符串提取时,可以用()将规则包起来即可。例如:我们想提取超链接

    pat = re.compile(r'href="([^"]*)"')
    s = '<a href="http://www.qidian.com/">起点中文</a>'
    m = pat.search(s)
    print m.group(0)
    # href="http://www.qidian.com/
    print m.group(1)
    # http://www.qidian.com/

    “()”表示我们想要提取的字符串内容,用group()函数方法取得,group(0) 取得匹配的字符串,group(1)取得第一个分组。

    当要取得所有符合规则的字符串时我们可使用findall()方法

    pat = re.compile(r'href="([^"]*)"')
    s = '<a href="http://www.qidian.com/">起点中文</a><a href="http://www.qidian.com/">起点中文</a>'
    m = pat.findall(s)
    print m
    #['http://www.qidian.com/', 'http://www.qidian.com/']

    此时若匹配返回的结果是一个list。

    反斜杠的困扰

    pat = re.compile(r'href="([^"]*)"')

    正则里面有个‘r’是原生字符串的意思,它表示不转义,例如:

      

    path="c:
    oway"
    print path
    # c:
    # oway
    path=r"c:
    oway"
    print path
    # c:
    oway

    正则表达式用”\”表示反斜杠符号,因此当要匹配字符串中的“\”时需要用“\\”,前两个表示一个反斜杠即转义字符,后两个表示真正的反斜杠。当加上前缀r时,就只用“\”匹配反斜杠。

    示例如下:

    re_str_patt = "\\"
    reObj = re.compile(re_str_patt)
    str_test = "abc\cd\hh"
    print reObj.findall(str_test)
    # ['\', '\']
    r_str_patt = r"\"
    print reObj.findall(str_test)
    # ['\', '\']

      

  • 相关阅读:
    Swift--集合类型 数组 字典 集合
    Swift--基础(一)基本类型 符号 字符串(不熟的地方)
    myFocus焦点图插件
    createjs基础
    111
    Foundation class diagram
    UIKit class diagram
    iOS Development
    What Is Cocoa?
    Cocoa 基本原理
  • 原文地址:https://www.cnblogs.com/moye13/p/5286483.html
Copyright © 2011-2022 走看看