zoukankan      html  css  js  c++  java
  • python--re模块(正则表达式)

    正则在线测试  http://tool.chinaz.com/regex  

    需要  import re 

      转义字符

    [abc]   匹配中括号中的一个字符

    [a-c]   匹配a-c中的一个字符

    [a-dm-p] 匹配a-d或m-p中的一个字符

    .     除换行符 之外的任何单个字符匹配

    w    匹配一个单词字符 字母(包括a-z  A-Z)、数字、下划线

    W   匹配  除w之外的其它字符

    s   匹配  任何空白字符,(包括 换行符 、回车符 、制表符 、垂直制表符v、换页符f)

    S    匹配 除s之外的其它字符

    d    匹配数字(0--9)

    D    匹配  除d之外的其它字符

      匹配换行符

       匹配制表符

       匹配单词结尾        ab     以ab为结尾的单词【边界分隔符可以是 空格、逗号、-、句号】

    B    匹配非单词边界     比如 abB   不是以ab结尾的单词

    ^    匹配字符串开头    ^gh  gh是字符串的头

    [^x]   匹配除了x之外的任意字符,  非的意思

    [^abc]   匹配除了abc三个字母之外的任意字符

    $    匹配字符串的尾   gh$   gh是字符串的尾

    ae|b    匹配ae或b   【先左后右  ab|abc 匹配ab不匹配abc】

    ()    分组  

    按照左括号从左往右排序第一组 1  以此类推   表示与第一组内容相同,后面的分组的内容跟这个相同时1, 需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式

    (?P<name>……)  除了原有的编号外,再指定一个名称,后面的分组的内容跟这个相同时(?P=name)

    例子  

    findall    split   有分组优先

    {n}   重复n次

    {n,}   重复n次或多于n次

    {n,m}  重复 n -m次

    {n}?    重复n次   尽量少重复

    {n,}?    重复n次或多于n次   尽量少重复

    {n,m}?    重复n-m次   尽量少重复

    *  表示重复0次或多  【尽量多的匹配  贪婪匹配】

    *?    重复0次或多次   尽量少重复

    +  重复1次或多      【尽量多的匹配  贪婪匹配】

    +?    重复1次或多次   尽量少重复

    ?     重复0次或1次   

    注意  量尺?  就是惰性匹配

    .*?x   遇到x就停

    r 后面的字符都是普通字符

    ?=    正向预查[正向条件匹配]   这个位置满足条件的就匹配,不满足条件就不匹配    

    例 d{3}-d{8} (?=Microsoft)    Microsoft不会显示出来

    ?!     负正向预查 [非正向条件匹配]    这个位置满足条件的就不匹配,不满足条件就匹配    

    例 d{3}-d{8} (?!Microsoft)       Microsoft不会显示出来

    ?<=   反向预查    这个位置满足条件的就匹配,不满足条件就不匹配  

    例  (?<=girl) d{3}-d{3}      条件在前头

    |     从左往右匹配   左边一旦匹配不在匹配右边,所以把长的放左边

    正则方法:

    标志位

    re.I 忽略大小写

    re.L 表示特殊字符集 w, W, , B, s, S 依赖于当前环境

    re.M 多行模式,会影响^ $,每一行都是一个新的开头和结尾

    re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)

    re.U 表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库   默认设置

    re.X 为了增加可读性,忽略空格和' # '后面的注释   

    compile 函数

    用于编译正则表达式,生成一个正则表达式对象

    语法格式为:p=re.compile(pattern[, flags])

    参数1   pattern : 一个字符串形式的正则表达式

    参数2   flags 可选,标志位  表示匹配模式,比如忽略大小写,多行模式等

    findall

    在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表

    语法格式一:s=re.findall('d','liming tan23guwu468zhong')

    参数1   正则表达式

    参数2   字符串

    注意:findall函数的正则表达式中如果有(),默认优先匹配()内;要取消分组优先在组内加?:

    例子 s=re.findall('www.(?:baidu|oldboy).com','jhgfwww.oldboy.comhgffd')  

    可以给分组起名 (?P<名字>d+)

    re.finditer

    findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回

    参数1   正则表达式

    参数2   字符串

    参数3  可选  标志位

    返回值 是一个对象迭代器,每个对象需要group()才能拿到结果

    例子

    s=re.finditer('d+','adff34lkjhg87nhbvf90')

    for i in s:

        print(i.group())

    语法格式二:s=p.findall('2345lm0987MING654abc87654',5,18)

    p 正则对象

    参数1   字符串

    参数2   起始位置

    参数3   结束位置(不包括)

    例子     s=p.findall('2345lm0987MING654abc87654',5,18)

    re.search方法

    扫描整个字符串并返回第一个成功的匹配

    函数语法:re.search(pattern, string, flags=0)

    参数1   正则表达式

    参数2   要匹配的字符串

    参数3    可选参数   标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

    匹配成功re.search方法返回一个匹配的对象,否则返回None

    我们可以使用group()匹配对象函数来获取匹配表达式,如果返回的是Nonegroup()时会报错

    group()  可以加一个参数(组号),组号就是正则表达式的分组的序号 第一个()序号是1

    例子

    s=re.search(r'[A-Z]+','2345lm098KH7654abc87654')

    if s !=None:

        ss=s.group()

        print(ss)

    re.match函数

    re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none

    匹配成功返回一个匹配的对象我们可以使用group()匹配对象函数来获取匹配表达式

    如果返回的是None,group()时会报错

    例子

    s=re.match(r'[A-Z]+','B2345lm098KH7654abc87654')

    if s !=None:

        ss=s.group()

        print(ss)

    re.split   分割

    能够匹配的做为分隔符,分割后返回列表

    语法  s=re.split(pattern, string[, maxsplit=0, flags=0])

    参数1  正则表达式

    参数2  字符串

    参数3  可选   分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数

    参数4  可选   标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等

    注意:分组功能

    如果有(),会保留()组内分隔符

    例子

    s=re.split('(d+)','adjg24kjbvc76lkjh89uytrc94mhb')

    结果 ['adjg', '24', 'kjbvc', '76', 'lkjh', '89', 'uytrc', '94', 'mhb']

    re.sub用于替换字符串中的匹配项

    语法:s=re.sub(pattern, repl, string, count=0)

    参数1  正则表达式   满足正则的被替换

    参数2  替换的字符串,也可为一个函数

    参数3  原字符串

    参数4  替换的最大次数,默认 0 表示替换所有的匹配

    返回替换后的字符串

    s=re.subn('d','|','liming2lixueqian8李明')

    参数1  正则表达式   满足正则的被替换

    参数2  替换的字符串,也可为一个函数

    参数3  原字符串

    参数4  替换的最大次数,默认 0 表示替换所有的匹配

    返回一个元组  元组的第一项就是替换后的字符串   第二项是被替换的次数

    我的常用匹配 

     d+.?d*            数值

     

    天子骄龙

  • 相关阅读:
    122. Best Time to Buy and Sell Stock II
    121. Best Time to Buy and Sell Stock
    72. Edit Distance
    583. Delete Operation for Two Strings
    582. Kill Process
    indexDB基本用法
    浏览器的渲染原理
    js实现txt/excel文件下载
    git 常用命令
    nginx进入 配置目录时
  • 原文地址:https://www.cnblogs.com/liming19680104/p/11323115.html
Copyright © 2011-2022 走看看