专业编程基础技术教程

网站首页 > 基础教程 正文

用最简单的方式教会你使用Python正则

ccvgpt 2024-10-12 13:45:50 基础教程 6 ℃

正则表达式

内容类

  1. 正则支持普通字符串, (如: 'a', 'b', 12 )
  2. 元字符, 通过一个字符匹配一堆内容

\d

用最简单的方式教会你使用Python正则

(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

Tags:

最近发表
标签列表