正则表达式

Regular Expression概述


对字符串定规矩
描述某种规则的表达式
英语:Regular Expression,在代码中常简写为regex、regexp或RE
Regular Expression的“Regular”一般被译为“正则”、“正规”、“常规”。此处的“Regular”即是“规则”,"规律"的意思

Regular Expression即“描述某种规则的表达式”之意。
作用: 通过regex ,可以在一个字符串中找到特定所需的子串
    以字符匹配字符
匹配的过程: 不断消耗的过程,  (正则表达式中的字符)一个字符只能匹配一次!
匹配成功: 配成 正则表达式里的 所有规则(每一个字符的规则都得满足)

re模块

python中 使用Regular Expression的模块  --> re即regex的缩写

match(pattern, string, flags=0):  进行正则匹配检查方法
    若匹配, 返回 匹配对象( Match Object)
    否则返回None (注意 不是空字符串"",因为空字符串可能也是某种规则)

函数作用
compile把正则表达式的模式和标识转化成正则表达式对象,
match在字符串的开始位置尝试匹配正则表达式 match(pattern, string, flags=0),从头开始匹配,且regex中每一个规则都匹配完了,不管后面有没有字符立即停止匹配,返回匹配合规的那部分子串, (默认判断以什么开口, 却不判断以什么结尾)
search在字符串中查找匹配正则表达式模式的位置,返回 Match Object 的实例,如果没有找到匹配的位置,则返回 None。
split将字符串匹配正则表达式的部分割开并返回一个列表
findall在字符串中找到正则表达式所匹配的所有子串,并组成一个列表返回。
finditer在字符串中找到正则表达式所匹配的所有子串,并组成一个迭代器返回。
sub在字符串 string 中找到匹配正则表达式 pattern 的所有子串,用另一个字符串 repl 进行替换。 sub(pattern,repl, string[, count=0]) 替换 所有
subn该函数的功能和 sub() 相同,但它还返回新的字符串以及替换的次数。

falgs

  • re.S

转义

  • 在正则表达式里存在两层转义

    • 字符串转义 : 字符串本身存在转义, 目的是为了表达一些特殊的功能(拿出了一些字符来表示别的含义): \n, \t

    • 但是总得找个方式表达这个字符本身(比如 \),就是字符本身,没别的意思

    • 方法就是 加一个 \
    • 简单方法 : 加 r –>raw

    • 正则表达式转义: 也有转义, 也是为了表达一些特殊的功能(拿出了一些字符来表示别的含义): . , \t, *,

    • 但是总得找个方式表达这个字符本身(比如 \), 就是字符本身,没别的意思

    • 方法就是 加一个 \
    • 简单方法 : 加 r –>raw

    • 转义顺序: 先字符串, 再正则表达式

转义符

\f 表示换页 form feed
\t 表示水平制表符   horizontal table
\v 表示垂直制表符   vertical  table
    lc
      lc
        lc
          lc
            lc
              lc
\n newline / next  移动到下一行的开头
\r return
\a aeolian bells
\num  表示指定分组   ,引用分组num匹配到的字符串
    re.match(r"<()>")

单个字符

[ ]                  匹配[ ]中列举的字符
.   [^\n\r]         任意字符(除了换行\n和回车\r之外)
\d  [0-9]           数字,数字字符 Digit
\D  [^0-9]           非数字,字符
\w  [a-zA-Z0-9_]    字母,数字,下划线 (标识符) Word
\W  [^a-zA-Z0-9_]   非单词字符(非标识符)
\s  [\f\r\n\t\v]    匹配空白,即 空格,tab键(不可见字符) Space
\S  [^\f\r\n\t\v]   非空白(可见字符)
字符功能
.匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9 —> digital
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键 —> space
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_、unicode字符(中文/日文都行) –> word
\W匹配非单词字符
记忆线:
    范围从小到大:
    space --> digital --> word  -->  [] --> .
    空格 -->  (  数字  --> 单词 )  -->  ( 指定--> 所有  )
    大写取反

表示数量(连续出现)

字符功能
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有;
{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现从m到n次
“*”重复零次或更多 x>=0
“+”重复一次或更多次 x>=1
“?”重复零次或一次 x=(0||1)
{n}n次 x=n
{n,}重复n次或更多 x>=n
{n,m}重复出现的次数比n多但比m少 n<=x<=m
记忆线: 连续出现次数
    ? --> + --> *
    要么有,要么没有  -->  最起码一次 --> 任意次
    {m,n} m到n次  

表示边界

字符功能
^匹配字符串开头
$匹配字符串结尾
\b匹配一个单词的边界
\B匹配 非单词 边界

匹配分组 group

字符功能
|匹配左右任意一个表达式
(ab)将括号中字符作为一个分组
\num引用分组num匹配到的字符串
(?P\)分组起别名
(?P=name)引用别名为name分组匹配到的字符串
记忆线:
    ( a | b ) : 组内左或右

套路

套路思想
r”<[^>]*>取到你想匹配的字符之前, 再加上这个字符, 就取到了全部

贪婪和非贪婪

前提:  是在 满足整个 正则表达式的 前提下!

贪婪: 在满足后面的规则前提下, 尽量多取 
非贪狼: 尽量少取
    1.不贪婪: 后面没有规则, 
            能少取就少取
    2.弱贪婪:后面有规则,
            在满足后面的规则的贪婪前提下, 再尽量多取(弱贪婪)

针对对象: 数量 通配符  * / + / ? / {m,n}

贪婪转非贪婪:
    数量 通配符  + ?

极端最不贪婪:
    ?*  --> 没有
    +*  --> 一个
    **  --> 没有
    {m,n}? --> m
  • 贪婪:
    在满足后面规则的前提下 , 前面的规则尽量多取
  • 非贪婪:
    在满足后面规则的前提下, 前面的规则尽量少取
>>> re.match(r"aa(\d+)","aa2343ddd").group(1)
'2343'
>>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
'2'
>>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1) 
'2343'
>>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
'2343'
>>>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值