正则表达式详解

1. 导入正则表达式

import re

2.正则表达式规则

2.1 单字符匹配    
规则                             功能
.                             匹配任意1个字符(除\n)    
[]                           匹配[]中列举的字符
\d                          匹配数字, 0-9
\D                          匹配非数字
\s                          匹配空白符, 空格, Tab键
\S                          匹配非空白符
\w                          匹配单词字符,a-z,A-Z,0-9,_
\W                          匹配非单词字符

2.2 匹配数量
规则                               功能
*                            匹配前一个字符出现0次多次或无限次,可有可无
+                           匹配前一个字符出现1次多次或无限次,至少得出现一次
?                         匹配前一个字符出现1次或者0次,至多出现1次
{m}                       匹配前一个字符出现m次
{m,}                      匹配前一个字符至少出现m次
{m,n}                    匹配前一个字符至少出现m次,至多出现n次

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

pattern = r"^\w+\s\b\world\b\s!$" 匹配hello world ! 但是不匹配helloworld !

2.4 匹配分组
规则                               功能
|                              匹配左右任意一个表达式
(ab)                        将括号中字符作为一个分组
\num                       引用分组num匹配到的字符串
(?P<name>)           分组起别名
(?P=name)             引用别名为name分组匹配到的字符串

例子一:
匹配出0-100之间的数字
pattern = r"0$|100$|[1-9]\d{0,1}$"

例子二:
匹配分组,获取页面中<h1>标签的内容
pattern = r"<h1>(.*)</h1>                                         #str="<h1>hello world!</h1>"  
测试一下re.groups(), re.group(), re.group(1)的区别

例子三
分组引用,精确获取多个标签内的内容
pattern = r"<(.+)><(.+)>.*</\2></\1>"                    #str="<span><h1>hello world!</h1></span>"

例子四
分组起别名
pattern = r"<(?P<key1>.+)><(?P<key2>.+)>(?P<nr>.*)</(?P=key2)></(?P=key1)>"                    #str="<span><h1>hello world!</h1></span>"

3. 使用的方法

方法一:
re.match(pattern, string[, flags])
pattern:     匹配的正则表达式
string:        要匹配的字符串
flags:        标志位,用于控制正则表达式的匹配方式,如:是否区分大小写

返回match对象:
   使用group(), groups(), groupdict()获取匹配表达式
   group([group1, ... ]):获取一个或多个分组截获的字符串,指定多个参数时以元组形式返回,编号0代表整个匹配的子串;不填写参数时,返回group(0),可以用别名也可以用编号。
   没有截获字符串的组返回None;截获多次的组返回最后一次截获的子串
   groups(): 以元组形式返回全部分组截获的字符串
   groupdict():返回以有别名的组的别名为键,以改组截获的子串为值的字典。没有别名的组不包含在内。

方法二:
re.search(pattern, string, flags=0)
pattern:        匹配的正则表达式
string:            要匹配的字符
flags:            标志位,用于控制正则表达式的匹配方式。如:是否区分大小写,多行匹配等

re.search()方法扫描整个字符串,并返回第一个成功的匹配,如果匹配失败,则返回None

与re.match()方法不同,re.match()方法要求必须从字符串的开头进行匹配,如果字符串的开头不匹配,整个匹配就失败了;re.search()并不要求必须从字符串的开头进行匹配

方法三:
re.sub(pattern, repl, string, count=0, flag=0)
pattern:                    正则表达式
repl:                            被替换的内容
string:                        正则表达式匹配的内容
count:                        正则表达式匹配的结果是多个,使用count来限定替换的个数从左向右,默认值是0,替换所有的匹配到的结果
flags:                        匹配模式,可以使用按位或者“|”标识同时生效。

方法四:
re.findall(pattern, string, flags=0)

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

方法五:
re.split(pattern, string, maxsplit=0)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值