re [perl风格正则]

    compile(pattern,flags=0)          # 对正则表达式模式pattern进行编译,flags是可选标识符,并返回一个regex对象
    match(pattern,string,flags=0)     # 尝试用正则表达式模式pattern匹配字符串string,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None
    search(pattern,string,flags=0)    # 在字符串string中搜索正则表达式模式pattern的第一次出现,flags是可选标识符,如果匹配成功,则返回一个匹配对象;否则返回None
    findall(pattern,string[,flags])   # 在字符串string中搜索正则表达式模式pattern的所有(非重复)出现:返回一个匹配对象的列表  # pattern=u'\u4e2d\u6587' 代表UNICODE
    finditer(pattern,string[,flags])  # 和findall()相同,但返回的不是列表而是迭代器;对于每个匹配,该迭代器返回一个匹配对象
    split(pattern,string,max=0)       # 根据正则表达式pattern中的分隔符把字符string分割为一个列表,返回成功匹配的列表,最多分割max次(默认所有)
    sub(pattern,repl,string,max=0)    # 把字符串string中所有匹配正则表达式pattern的地方替换成字符串repl,如果max的值没有给出,则对所有匹配的地方进行替换(subn()会返回一个表示替换次数的数值)
    group(num=0)                      # 返回全部匹配对象(或指定编号是num的子组)
    groups()                          # 返回一个包含全部匹配的子组的元组(如果没匹配成功,返回一个空元组)

零宽断言

        str = 'aaa111aaa , bbb222&, 333ccc'
        re.compile('\d+(?=[a-z]+)').findall(str)          # 前向界定 (?=exp) 找出连续的数字并且最后一个数字跟着至少一个a-z ['111', '333']
        re.compile(r"\d+(?![a-z]+)").findall(str)         # 前向否定界定 (?!exp)  找出连续数字,且最后一个数字后不能跟a-z  ['11', '222', '33']
        re.compile(r"(?<=[a-z])\d+").findall(str)         # 反向界定 (?<=exp) 逆序环视 找出连续的数字,且第一个数字前面是a-z  ['111', '222']
        re.compile(r"(?<![a-z])\d+").findall(str)         # 反向否定界定 (?<!exp) 否定逆序环视  找出连续的数字,且第一个数字前不能是a-z  ['11', '22', '333']
        re.compile(r"(?:\d+)").findall(str)               # 无捕获的匹配 (?:exp)
        s= 'Tom:9527 , Sharry:0003 '
        re.match( r'(?P<name>\w+):(?P<num>\d+)' , s).group(0)   # 捕获组 <num>第二个标签变量[9527] 获取 group("num") 等同 group(2)[9527], group(0)全部[Tom:9527]

例子

        re.findall(r'a[be]c','123abc456eaec789')         # 返回匹配对象列表 ['abc', 'aec']
        re.findall("(.)12[34](..)",a)                    # 取出匹配括号中内容   a='qedqwe123dsf'
        re.search("(.)123",a ).group(1)                  # 搜索匹配的取第1个标签
        re.match("^(1|2) *(.*) *abc$", str).group(2)     # 取第二个标签
        re.match("^(1|2) *(.*) *abc$", str).groups()     # 取所有标签
        re.sub('[abc]','A','alex')                       # 替换
        for i in re.finditer(r'\d+',s):                  # 迭代
            print i.group(),i.span()                     #

搜索网页中UNICODE格式的中文

        QueryAdd='http://www.anti-spam.org.cn/Rbl/Query/Result'
        Ip='222.129.184.52'
        s = requests.post(url=QueryAdd, data={'IP':Ip})
        re.findall(u'\u4e2d\u56fd', s.text, re.S)
文档更新时间: 2018-11-21 17:20   作者:RuM