- 正则表达式的定义、作用特点、应用场景
- 正则re模块方法
- 正则的基础符号
- 正则分组匹配
1.正则表达式的定义、作用特点、应用场景
定义:
正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
作用及特点:
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1.给定的字符串是否符合正则表达式的过滤逻辑(称作‘匹配’)。
2.可以通过正则表达式,从字符串中获取我们想要的特定部分。
应用场景:
判断一个字符串是否是手机号
判断邮箱格式对不对
假如你写一个爬虫,你想得到某个特定标签的内容
2.正则re模块方法
match 从头开始匹配一次
search 只匹配一次
findall 查找所有
sub(正则表达式,‘新内容’,string) 进行替换
split result = re.split(r',:','java:99,python:95') 在字符串中搜索如果遇到:或,号,
就分割,将分割的内容都保存到列表中
3.正则的基础符号
范围类
[] 匹配范围
. 所有字符(除\n外)
^ 行首
$ 行尾
^..str..$ 从头匹配到尾
[0-9] 纯数字
[a-zA-Z] 纯字母
[0-9a-zA-Z] 数字和字母
[#$%^&*] #或$或%或^或&或*
次数类
* 0次以上
+ 1次以上
{m,} m次以上
{n} n次
{m,n} m-n次
? 0次 或 1次
转义类
\A 从开始匹配
\Z 从结束匹配
\b 匹配单词边界 即单词间的空格
\B 非单词边界
\d [0-9]
\D [^\d]非数字
\s [\t\n\r\f] 匹配任意空白字符
\S [^\s]匹配任意非空白字符
\w [a-zA-Z0-9_] 匹配任意 数字 字母 下划线
\W [^\w]
\\ 匹配\
. 用于匹配除换行符(\n) 之外的所有字符。
^ 用于匹配字符串的开始,即行首。
$ 用于匹配字符串的末尾(末尾如果有换行符\n,就匹配\n前面的那个字符),即行尾。
* 用于将前面的模式匹配0次或多次(贪婪模式,即尽可能多的匹配)
+ 用于将前面的模式匹配1次或多次(贪婪模式)
? 用于将前面的模式匹配0次或1次(贪婪模式)
*? +? ?? 即上面三种特殊字符的非贪婪模式(尽可能少的匹配)。
{m,n} 用于将前面的模式匹配m次到n次( 贪婪模式),即最小匹配m次,最大匹配n次。
{m,n}? 即上面‘{m,n}’的非贪婪版本。
\ 是转义字符,在特殊字符前面加上\,特殊字符就失去了其所代表的含义,比如\+就仅仅代表加号+本身。
[] 用于标示一组字符,如果是第一个字符,则标示的是一个补集。比如[0-9]表示所有的数字,[ 0-9]表示除了数字外的字符
| 比如A I B用于匹配A或B。
(...) 用于匹配括号中的模式,可以在字符串中检索或匹配我们所需要的内容。
# 用户名可以是字母或者数字,不能是数字开头,用户名长度必须是6位以上
import re
username = 'admin11111'
result = re.search(r'^[a-zA-Z]\w{5,}$', username)
print(result) # 结果为:<_sre.SRE_Match object; span=(0, 10), match='admin11111'>
print(result.group()) # 结果为:admin11111 使用group提取到匹配的内容
print(result.span()) # 结果为:(0, 10) 返回位置
4.正则分组匹配
分组:
用 () ---》 result.group(1) 获取组中匹配的内容
在分组的时候还可以结合 |
#引用分组匹配内容:
1.number \number 引用第number组的内容
2.(?P<名字>正则)(?P=名字)
msg = '<html><h1>abc</h1></html>'
result = re.match(r'<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</\2></\1>$', msg)
print(result.group(3)) # 结果为:abc
result1 = re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>$', msg)
print(result1.group(3)) # 结果为:abc