网站首页 > 基础教程 正文
正则表达式
内容类
- 正则支持普通字符串, (如: 'a', 'b', 12 )
- 元字符, 通过一个字符匹配一堆内容
\d | (digital)匹配一个数字(0 - 9) |
\w | (word)匹配数字(0-9), 字母(a- zA - Z), 下划线(_) |
\D | 非数字 |
\W | 非字母 |
[]/[^] | [] 范围内匹配, 匹配 [] 内的任意一个字符或 非括号内字符 |
. | 除换行符, 全部匹配 |
计数类
* | 前边的元字符出现任意数量 (有贪婪属性) |
? | 前边的元字符出现或不出现 |
+ | 前边的元字符出现一个或多个 |
{n}, {m, n} | n, m 都为非负正整数 {n} 匹配 n 次 {n,} 最少匹配 n 次 {n,m} 最少匹配 n 次, 最多匹配 m 次 |
边界符号类
^ / $ | |
\b | 匹配边界词 |
\B | 匹配非边界词 |
是否惰性
.* | 表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符 |
.*? | 表示"非贪婪"模式,只保存第一个匹配到的子串 |
python re 模块
Python中通过re模块来实现正则功能, 以下是常用示例代码
# 引入Python正则模块
import re
# pattern 字符串形式的正则表达式
# string 要匹配的字符串
# flags 匹配模式
re.findall(pattern="", string="", flags=re.S)
匹配模式:
- re.I 忽略大小写
- re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M 多行模式
- re.S 即为' . '并且包括换行符在内的任意字符(' . '不包括换行符)
- re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
- re.X 为了增加可读性,忽略空格和' # '后面的注释
常用方法示例
import re
# 查找所有匹配项
res1 = re.findall(pattern=r"\d+", string="今天有100, 吃2个包子")
print(res1)
# ['100', '2']
# 搜索匹配项, 返回第一个匹配成功的
res2 = re.search(pattern=r"\d+", string="今天有100, 吃2个包子")
print(res2, ", ", res2.group())
# <re.Match object; span=(3, 6), match='100'> , 100
# 返回匹配的枚举, 数据量大时推荐使用
res3 = re.finditer(pattern=r"\d+", string="今天有100, 吃2个包子")
for r in res3:
print(r, ", ", r.group())
# <re.Match object; span=(3, 6), match='100'> , 100
# <re.Match object; span=(9, 10), match='2'> , 2
# 预编译正则
pattern = re.compile(r"\d+")
print(pattern.match("今天有100, 吃2个包子"))
print(pattern.findall("今天有100, 吃2个包子"))
# 只匹配开头,返回bool
pattern.match(str)
分组匹配
括号分组(通过括号顺序分组)
import re
# 定义正则表达式模式
pattern = r"(\d+)([\w]+)"
# 要匹配的字符串
string = "123hello world"
# 使用 match()方法进行匹配
match = re.match(pattern, string)
# 检查是否匹配成功
if match:
# 通过索引访问分组捕获的内容
group1 = match.group(1)
group2 = match.group(2)
print(f"分组 1: {group1}")
print(f"分组 2: {group2}")
else:
print("匹配失败")
# 分组 1: 123
# 分组 2: hello
命名分组(通过指定分组名字进行分组
(?P<分组名>))
import re
# 定义正则表达式模式
pattern = r"(?P<name>\w+) (?P<age>\d+)"
# 要匹配的字符串
string = "Alice 25"
# 使用 match()方法进行匹配
match = re.match(pattern, string)
# 检查是否匹配成功
if match:
# 通过名称访问分组捕获的内容
name = match.group("name")
age = match.group("age")
print(f"姓名: {name}")
print(f"年龄: {age}")
else:
print("匹配失败")
# 姓名: Alice
# 年龄: 25
猜你喜欢
- 2024-10-12 python代码是如何执行的? python的代码如何运行
- 2024-10-12 deepin os下使用Geany编写python程序
- 2024-10-12 扩展和嵌入 Python 之重定向输出与编译
- 2024-10-12 python爬虫数据匹配-正则(re模块的用法)
- 2024-10-12 Python中的.pyc文件是干什么的呢?
- 2024-10-12 解锁 Python 中的正则表达式:轻松搞定文本处理
- 2024-10-12 Python 的底层 — 解释器和内存管理,你了解多少
- 2024-10-12 python程序执行原理 描述python程序执行原理
- 2024-10-12 这些 python 技巧,不知道就 out 了
- 2024-10-12 “挑战用 500 行 Python 写一个 C 编译器”
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)