21.Python基础篇-正则表达式与re模块

正则常用

基础符号

.:匹配任意单个字符(除换行符)
^:匹配字符串的开头
$:匹配字符串的结尾
*:匹配前一个字符0次或多次
+:匹配前一个字符1次或多次
?:匹配前一个字符0次或1次
{n}:匹配前一个字符n次
{n, m}:匹配前一个字符n到m次

字符集

[abc]:匹配字符 a、b 或 c
[^abc]:匹配除 a、b、c 以外的字符
[a-z]:匹配小写字母a到z
[0-9]:匹配数字0到9

预定义字符集

\d:匹配任何数字,等同于 [0-9]
\D:匹配任何非数字字符,等同于 [^0-9]
\w:匹配任何字母数字字符(字母、数字、下划线),等同于 [a-zA-Z0-9_]
\W:匹配任何非字母数字字符,等同于 [^a-zA-Z0-9_]
\s:匹配空白字符(包括空格、制表符、换页符等)
\S:匹配非空白字符

分组与选择

(abc):将 abc 作为一个整体进行匹配
|:选择符,例如 a|b 匹配 a 或 b
(ab|cd):匹配 ab 或 cd
(?:...):非捕获组,不存储匹配结果

re模块

re.match()

从字符串的开头开始匹配,只有在字符串的开头找到匹配项时才会返回结果,否则返回 None。
result = re.match(r'a', 'abcdefgabc')  # 字符串的开头是a,所以能匹配到
print(result)  # <re.Match object; span=(0, 1), match='a'> 返回一个Math对象
print(result.group())  # a 调用group方法打印出匹配的内容

result = re.match(r'a', 'bcdefgabc')  # 字符串的开头不是a,即使中间含有a,还是会返回None
print(result.group())  # 调用group方法会报错。None.group()会报错

 

re.search()

在整个字符串中搜索第一个匹配项,只要在字符串中找到一个匹配就会返回结果。匹配不到返回None。
result = re.search(r'b', 'abcdefgabc')  # 字符串中的两个b,只返回第一个,而且是前面的b
print(result)  # <re.Match object; span=(1, 2), match='b'>  返回一个Match对象
print(result.group())  # 调用group方法打印结果:b

re.findall()

返回所有与正则模式匹配的子串,结果以列表形式返回。适合需要查找所有匹配项的情况。匹配不到返回空列表。
result = re.findall(r'\d+', 'abc123xyz456')
print(result)  # ['123', '456']

result = re.findall(r'\d+', 'xyz')
print(result)  # []

re.sub()

将字符串中匹配到的部分替换为指定内容。适合在字符串中进行批量替换。

result = re.sub(r'\d+', '*', 'abc123xyz456')  # 将多个匹配到的数字组合,替换为*号
print(result)  # abc*xyz*

 

result = re.sub(r'\d+', '*', 'abc123xyz456',count=1)  # count=1,表示只替换1次
print(result)  # abc*xyz456

re.subn()

subb与sub的区别在于,subn会多返回一个数字,数字表示替换次数。

re.split()

根据匹配模式分割字符串,并返回分割后的列表。
result = re.split(r'\d+', 'abc123xyz456')
print(result)  # 输出:['abc', 'xyz', '']

result = re.split(r'\d+', 'abc123xyz456', maxsplit=1)  # maxsplit=1表示最多只分割1次
print(result)  # ['abc', 'xyz456']

 

 

posted @ 2024-11-02 12:46  邵杠杠  阅读(3)  评论(0编辑  收藏  举报