正则表达式

理解:
正则表达式用于搜索,替换,和解析字符串,是一种用于文本匹配的工具。

特别字符描述
$匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 \$。
( )标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。
*匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。
+匹配前面的子表达式一次或多次。要匹配 + 字符,请使用\ +。
.匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 \. 。
[标记一个中括号表达式的开始。要匹配 [,请使用\ [。
?匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用\ ?。
\将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\\’ 匹 配 “”,而 ‘\(’ 则匹配 “(”。
^匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用\ ^。
{标记限定符表达式的开始。要匹配 {,请使用\ {。
|指明两项之间的一个选择。要匹配 |,请使用 \|。
\w匹配数字字母下划线
\W匹配不是数字,字母,下划线的字符
\s匹配空白字符
\S匹配非空白的字符
\d匹配数字
\D匹配非数字的字符
\b匹配单词开始和结束
\B匹配不是单词开始和结束的位置
[m]匹配单个字符
[m1m2…n]匹配多个字符
[m-n]匹配m到n区间内的数字字母
[^m]匹配除m以外的字符
注意:
匹配符[]可以匹配一个范围。
    例如:【OK】将匹配含O或者含K的字符串;“【】”可以与\w,\s,\d等标记等价;【0-9a-zA-Z_】等价于\w;[^0-9]等价于\D.
    ^与【^m】中的“^”含义不同,后者表示“除了……”。
常用限定符描述
*匹配零次或多次
+匹配一次或多次
?匹配一次或零次
{m}重复m次
{m,n}重复m到n次,n可以省略,表示m到任意次。
理解:利用{}可以控制操作字符次数。
  • 对正则表达式进行嵌套使用分组“()”。例如对三位数字重复四次(\d\d\d){4}版本不同,可能对应的数字不同,本人实验得重复x次,{}内的数字为x.

  • \d\d\d{n},注意两者区分,此处尽在第三处\b重复三次。
    默认情况下,正则表达式匹配最长的字符串,如想匹配最短字符串,可在限定符后面添加“?”。

    待匹配文本:acaccaacaaccaccc
    正则表达式:a*?c
    共找到 9 处匹配:
      ac
      ac
      c
      aac
      aac
      c
      ac
      c
      c
    注意匹配结果!!!  
    
    符号描述
    *?匹配零次或多次且最短匹配
    +?匹配一次或多次且最短匹配
    ??匹配一次或零次且最短匹配
    {m,n}?匹配m次且最短匹配
    (?#…)正则表达式中的注释
    (?P…)给分组名,name表示分组名称
    (?P = name)使用名为name的分组

    后两者为Python中的用法。


    使用sys.re模块处理正则表达式
    函数描述
    findall(pattern,string,flags = 0)根据pattern在string中匹配字符串。如果匹配成功,返回包含匹配结果的列表,否则返回空列表。当pattern中有分组时,返回包含多个元组的列表,每个元组对应一个分组。flags表示规则选项,规则选项用于辅助匹配。
    sub(pattern,repl,string,count = 0)根据指定的正则表达式替换原字符串中的子串。pattern是一个正则表达式,repl是用于替换的字符串,string是原字符串。若count = 0,则返回string中匹配的所有结果;若count > 0,则返回前count个匹配结果
    subn(pattern,repl,string,count = 0)作用同sub相同。返回一个二元的数组。第一个元素是替换结果,第二个元素是替换次数。
    match(pattern,string,flags = 0)根据pattern从string头部开始匹配结果,只返回第一次匹配成功的对象,否则返回None
    search(pattern,string,flags = 0)根据pattern在string中匹配字符串,只返回第一次匹配成功的对象,若匹配失败,则返回None。
    complie(pattern,flags = 0)编译一个正则表达式,返回一个Pattern对象。
    split(pattern,string,maxsplit = 0)根据pattern分割string,maxsplit表示最大分割数。
    escape(pattern)匹配字符串中的特殊字符。

    函数match(必须从字符串的第0个位置开始搜索,若果第0个索引位置的索引不匹配,match()的匹配就会失败。)
    ** RE模块的规则选项**

    选项描述
    I 或 IGNORECASE忽略大小写
    L或 LOCALE字符集本地化,用于多语言环境
    M 或MULTILINE多行匹配,使用^ $,匹配除了string开始结束外,还匹配一行的开始和结束
    S 或DOTALL使用" . "匹配包括“\n”在内的所有字符。
    X 或VERBOSE忽略正则表达式中的空白,换行,以方便添加注释
    U 或UNICODE“\B”,"\b","\w","\W","\d","\D","\s","\S"都将使用Unicode
  • 正则表达式中有三中间隔符——^,$,\b.^ 匹配字符串首部的子串;$ 匹配结束部分字符串;\b用于分割单词。

  • re模块中的sub()可以实现字符串的替换。
    在这里插入图片描述
    结果:
    在这里插入图片描述
    sub()先创建变量是sh的拷贝,在拷贝中替换字符串,不改变 变量sh的内容。
    样例:
    在这里插入图片描述
    结果:
    在这里插入图片描述

    r标识后代表正则表示语句

    空白字符有[\b],\f,\n,\r,\t,\v.
    subn()相较于sub()多返回匹配后的替换次数。
    据某些大神说\w为匹配汉字看编译环境。

pattern对象的属性及方法

若要使用同一规则匹配字符串,可以使用compile()函数进行预编译,complie函数返回一个pattern对象。

方法描述
Pattern获取当前使用的正则表达式
findall(string[, start[, end] ] )查找所有符合pattern对象匹配条件的结果,返回一个包含匹配结果的列表。参数string表示待查找的源字符串,参数start表示搜索开始位置,参数end表示搜索结束的位置。
finditer(string[ , start [ , end ] ] )返回一个包含匹配结果的地址
match(string[ , start[ , end] ] )用法同re.match()
search(string [ , start [ , end ] ] )用法同re.search()

样例:
在这里插入图片描述
结果:
在这里插入图片描述

函数compile()通常与match(),search(),group()一起使用。对含有分组的正则表达式解析。正则表达式的分组从左往右开始计数,第一个出现得圆括号标记为第一组,以此类推。0组用于储存整个正则表达式的结果。match()和search()将返回一个match对象。

属性或方法描述
Pos搜索开始的位置
Endpos搜索结束的位置
String搜索的字符串
Re当前使用正则表达式的对象
Lastindex最后匹配的组索引
Lastgruop最后匹配的组名
group(index = 0)某个分组的匹配结果。若index=0,则匹配整个表达式
groups()所有的分组的匹配结果,每个分组的匹配结果作为value的字典
Groupdict()返回组名作为key,每个分组的结果作为value的字典
start( [ group ] )获取组的开始位置
end([group])获取组的结束位置
span([group])获取组的开始和结束位置
expand( [ template ] )使用组的匹配结果来替换模板template中的内容,并把替换后的字符串返回

样例:
在这里插入图片描述
结果:
在这里插入图片描述

运算符优先级
运算符描述
\转义符
(), (?: ), (?=), []圆括号和方括号
*, +, ?, {n}, {n,}, {n,m}限定符
^, $, \任何元字符、任何字符定位点和序列(即:位置和顺序)
|替换,"或"操作字符具有高于替换运算符的优先级,使得"m

菜鸟教程网址: http://www.runoob.com/regexp/regexp-tutorial.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值