Python中re使用方法

以下是 Python 中 re 模块的正则表达式常用方法及示例,注释中详细说明了代码逻辑和输出结果。


1. re.match()

从字符串开头匹配模式,成功返回 Match 对象,否则返回 None

python

复制

import re

text = "Python is fun"
pattern = r"Python"  # 匹配开头的"Python"

result = re.match(pattern, text)
if result:
    print("Match found:", result.group())  # 输出: Match found: Python
else:
    print("No match")

# 失败示例:字符串开头不匹配
result = re.match(r"fun", text)  # 返回 None

2. re.search()

在字符串中搜索第一个匹配项,不限制必须从开头开始。

python

复制

text = "Learn Python programming"
pattern = r"Python"

result = re.search(pattern, text)
if result:
    print("Found:", result.group())  # 输出: Found: Python
    print("Position:", result.span())  # 输出: Position: (6, 12)

3. re.findall()

返回所有非重叠匹配项的列表。

python

复制

text = "a:1, b:2, c:3"
pattern = r"\d"  # 匹配所有数字

result = re.findall(pattern, text)
print(result)  # 输出: ['1', '2', '3']

4. re.finditer()

返回所有匹配项的迭代器(适合处理大量数据)。

python

复制

text = "a:1, b:2, c:3"
pattern = r"(\w+):(\d)"  # 分组匹配字母和数字

for match in re.finditer(pattern, text):
    print(f"Key: {match.group(1)}, Value: {match.group(2)}")
# 输出:
# Key: a, Value: 1
# Key: b, Value: 2
# Key: c, Value: 3

5. re.sub()

替换字符串中的匹配项。

python

复制

text = "2023-01-01"
pattern = r"-"
replacement = "/"

new_text = re.sub(pattern, replacement, text)
print(new_text)  # 输出: 2023/01/01

6. re.subn()

类似 sub(),但返回替换后的字符串和替换次数。

python

复制

text = "error: 404, error: 500"
pattern = r"error"
replacement = "status"

new_text, count = re.subn(pattern, replacement, text)
print(new_text)  # 输出: status: 404, status: 500
print("Replacements:", count)  # 输出: Replacements: 2

7. re.split()

用正则表达式分割字符串。

python

复制

text = "Apple,Banana;Cherry"
pattern = r"[,;]"  # 按逗号或分号分割

result = re.split(pattern, text)
print(result)  # 输出: ['Apple', 'Banana', 'Cherry']

8. re.compile()

预编译正则表达式,提升重复使用效率。

python

复制

pattern = re.compile(r"\b[A-Z]+\b")  # 匹配全大写单词
text = "HELLO world PYTHON"

matches = pattern.findall(text)
print(matches)  # 输出: ['HELLO', 'PYTHON']

9. 分组与命名分组

提取特定部分。

python

复制

text = "Date: 2023-10-05"
pattern = r"Date: (\d{4})-(\d{2})-(\d{2})"

match = re.search(pattern, text)
if match:
    print("Full match:", match.group(0))  # 输出: Date: 2023-10-05
    print("Year:", match.group(1))        # 输出: Year: 2023
    print("Month:", match.group(2))       # 输出: Month: 10
    print("Groups:", match.groups())      # 输出: Groups: ('2023', '10', '05')

# 命名分组(更清晰)
pattern = r"Date: (?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})"
match = re.search(pattern, text)
print("Year:", match.groupdict()['year'])  # 输出: Year: 2023

10. 标志(Flags)

控制匹配模式,如忽略大小写、多行匹配等。

python

复制

# re.IGNORECASE(忽略大小写)
text = "Hello World"
result = re.search(r"world", text, re.IGNORECASE)
print(result.group())  # 输出: World

# re.MULTILINE(多行模式下^/$匹配每行开头结尾)
text = "Line1\nLine2\nLine3"
matches = re.findall(r"^Line\d", text, re.MULTILINE)
print(matches)  # 输出: ['Line1', 'Line2', 'Line3']

# re.DOTALL(让.匹配包括换行符的所有字符)
text = "Start\nEnd"
result = re.search(r"Start.*End", text, re.DOTALL)
print(result.group())  # 输出: Start\nEnd

11. 错误处理

处理无效正则表达式。

python

复制

try:
    re.compile(r"*invalid")  # 语法错误
except re.error as e:
    print("Regex error:", e)  # 输出: Regex error: nothing to repeat

总结表格

方法/功能用途
re.match()从开头匹配模式
re.search()搜索第一个匹配项
re.findall()返回所有匹配的列表
re.finditer()返回匹配的迭代器
re.sub()替换匹配项
re.subn()替换并返回次数
re.split()正则分割字符串
re.compile()预编译正则表达式
分组/命名分组提取子匹配项
标志(Flags)控制大小写、多行等匹配模式

通过组合这些方法,可以高效处理字符串匹配、提取和替换等需求。

### Python `re` 库使用方法 #### 导入库 在Python中,`re` 是标准库的一部分,这意味着不需要额外安装即可直接使用。通过简单的导入语句就可以开始利用该库的功能: ```python import re ``` #### 编译模式 为了提高效率,在多次应用相同的正则表达式时应该先将其编译成模式对象。这可以通过调用 `re.compile()` 函数来完成[^2]。 ```python pattern = r'\d+' # 定义一个匹配数字序列的简单正则表达式 compiled_pattern = re.compile(pattern) ``` #### 进行匹配操作 一旦有了模式对象,便可以执行各种类型的字符串处理任务,比如查找、替换或分割文本数据。以下是几种常见的用途示例: ##### 查找所有匹配项 使用 `findall()` 方法可以从给定字符串中提取所有的匹配子串列表[^3]。 ```python text = "The price is 100 dollars and the tax rate is 7%" matches = compiled_pattern.findall(text) print(matches) # 输出 ['100', '7'] ``` ##### 替换匹配的内容 借助于 `sub()` 函数能够实现基于正则表达式的搜索与替换功能。此函数接受三个参数:第一个是要被替代的目标模式;第二个则是用来代替的新字符串;第三个为源字符串[^4]。 ```python original_text = 'hello 123 world 456' replacement_result = re.sub(r"\d+", "222", original_text) print(replacement_result) # 返回 'hello 222 world 222' ``` ##### 文本分隔 如果想要依据某些特定规则拆分一段文字,则可考虑采用 `split()` 方法。它会根据指定的分隔符将输入切分成多个部分,并返回这些片段组成的列表。 ```python sentence = "This-is-an-example" words = re.split('-', sentence) print(words) # 输出 ['This', 'is', 'an', 'example'] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值