目录
这是我自己通过看视频学习整理的笔记,有遗漏或需要改进的地方大家可以在评论区指正。
re:正则表达式 replace:用来替换的值 str:要匹配的字符串
一、Python中使用正则表达式
re.match(r"re", "str") | 使用正则表达式匹配字符串,用 .group()从返回值中提取字符串 match()函数会从str开头开始匹配,即默认为re添加^ eg:ret = re.match(r"re", "str") print(ret.group()) |
import re
ret_1 = re.match(r"指环王\d", "指环王")
ret_2 = re.match(r"指环王\d", "指环王1")
ret_3 = re.match(r"指环王\d", "指环王22")
ret_4 = re.match(r"指环王\d$", "指环王333")
print(ret_1.group())
print(ret_2.group())
print(ret_3.group())
print(ret_4.group())
其中第2、3个输出不会报错,第1、4个输出会报错
3不报错是因为没有设置结尾匹配,前面匹配成功,group()可以提取到字符串,不报错
1报错是因为匹配不成功则ret_1为None,使用group()提取不到信息,报错
4报错是因为设置了以0~9有且仅有一个来结尾,但是要匹配的字符串有三个,报错
二、正则表达式
匹配开头结尾
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
注:不设置正则表达式以什么结尾的话,只要匹配的字符串前面匹配成功,就算后面还有字符也会算匹配成功,上面例子已演示,大家可以自己敲敲。
匹配单个字符
. | 匹配任意一个字符,除了\n |
[] | 匹配[]中列举的其中一个字符,如[135sad],只匹配其中一个 |
\d | 匹配数字字符,0~9 |
\D | 匹配非数字字符 |
\w | 匹配单词(组成变量)字符,0~9、a~z、A~Z、_ 注:有些系统或环境下是可以匹配中文的,使用前先验证一下,谨慎使用 |
\W | 匹配非单词字符 |
\s | 匹配空白字符,如空格与tab键 |
\S | 匹配非空白字符 |
- 若要使用字符原本的意思,记得先使用 \ 转义,如 \. 表示 .
import re
ret_1 = re.match(r"指环王[123]", "指环王1")
ret_2 = re.match(r"指环王\w", "指环王_")
ret_3 = re.match(r"指环王\s", "指环王 ")
匹配多个字符
* | 匹配前一个字符的0个或无限个,即可以没有 |
+ | 匹配前一个字符的1个或无限个,即至少有一个 |
? | 匹配前一个字符的0个或1个 |
{m} | 匹配前一个字符的m个 |
{m,n} | 匹配前一个字符的m到n个 |
import re
ret_1 = re.match(r"\d?", "9")
ret_2 = re.match(r"\d+", "955513153")
ret_3 = re.match(r"abc\d{3,5}", "abc1513110")
大家自己修改一下正则表达式(re)还有要匹配的字符串(str),加深理解
匹配分组
| | 匹配左右任意一个表达式 |
() | 将括号中的字符作为一个分组,(ab) |
\num | 引用分组(上面)的内容,num从1开始,表示第一个分组 |
(?P<name>) | 为分组起别名 |
(?P=name) | 引用别名为name的分组 |
import re
# 验证邮箱是否符合要求,要求:@之前有4-12位,可以位163、qq、outlook邮箱
ret = re.match(r"\d{4,12}@(163|qq|outlook).com", "123456789@163.com")
print(ret.group())
# 直接通过 \num 调用分组或为分组起别名调用例子
html_str = "<body><h1>hahahhaha</h1></body>"
ret_1 = re.match(r"<(\w+)><(\w+)>.*</\2></\1>", html_str)
ret_2 = re.match(r"<(?P=<body>)><(?P=<h1>)>.*</(?P=h1)></(?P=body)", html_str)
print(ret_1.group())
print(ret_2.group())
abcd|efg:| 左边的表达式为abcd,右边表达式为efg,该式表示abcd或efg
ab(cd|efg):| 左边的表达式为cd,右边的表达式为efg,该式表示abcd或abefg
当调用分组时分组较少最好不好写别名,麻烦
三、Python中正则表达式的其他函数调用
re.search(r"re", "str") | 使用正则表达式匹配字符串,用 .group()从返回值中提取字符串 search()函数不会从str开头开始匹配,只要匹配到符合要求的数据就返回 |
re.findall(r"re", "str") | 返回一个列表,列表里为所有符合要求的数据 |
re.sub(r"re", "replace", "str") | 将匹配到的数据进行替换,返回值为字符串 |
re.split(r"re", "str") | 根据匹配将字符串进行切割,并返回一个列表 |
import re
def add(temp):
strAge = temp.group()
age = int(strAge) + 1
return str(num)
ret_1 = re.search(r"\d+", "这个人100岁")
print(ret_1.group())
ret_2 = re.findall(r"\d+", "这个人100岁, 他的儿子50岁")
print(ret_2)
ret_3 = re.sub(r"\d+", "3", "这个人100岁, 他的儿子50岁") # 这样子更改的话结果为字符串
print(ret_3)
ret_3 = re.sub(r"\d+", add, "这个人100岁, 他的儿子50岁") # 传到函数里面的并非是字符串
print(ret_3)
ret_4 = re.split(r":| ", "qq.email|123 456 789")
print(ret_4)