Python 的 re
模块提供了对正则表达式的支持,允许你进行复杂的字符串搜索、替换和解析操作。正则表达式(Regular Expressions)是一种强大的文本处理工具,使用一种特定的语法模式来描述在搜索文本时要匹配的一个或多个字符串。
以下是一些 re
模块中常用的函数和方法:
-
编译正则表达式
import re pattern = re.compile(r'\d+') # 匹配一个或多个数字
-
搜索字符串
-
re.search(pattern, string, flags=0)
: 搜索字符串中第一次出现正则表达式模式的位置,返回一个匹配对象(Match object),否则返回None
。match = re.search(r'\d+', 'abc123def456') if match: print(match.group()) # 输出: 123
-
-
匹配整个字符串
-
re.match(pattern, string, flags=0)
: 尝试从字符串的起始位置匹配正则表达式模式,如果匹配成功返回一个匹配对象,否则返回None
。match = re.match(r'\d+', '123abc') if match: print(match.group()) # 输出: 123
-
-
查找所有匹配项
-
re.findall(pattern, string, flags=0)
: 查找字符串中所有与正则表达式模式匹配的非重叠匹配项,返回一个列表。matches = re.findall(r'\d+', 'abc123def456ghi789') print(matches) # 输出: ['123', '456', '789']
-
-
查找所有匹配项及其位置
-
re.finditer(pattern, string, flags=0)
: 查找字符串中所有与正则表达式模式匹配的非重叠匹配项,返回一个迭代器,每个迭代元素是一个匹配对象。matches = re.finditer(r'\d+', 'abc123def456ghi789') for match in matches: print(match.group(), match.start(), match.end()) # 输出: # 123 3 6 # 456 9 12 # 789 15 18
-
-
字符串替换
-
re.sub(pattern, repl, string, count=0, flags=0)
: 使用repl
替换字符串中与正则表达式模式匹配的所有子串。count
用于指定最大替换次数。new_string = re.sub(r'\d+', 'NUM', 'abc123def456ghi789') print(new_string) # 输出: abcNUMdefNUMghiNUM
-
-
字符串分割
-
re.split(pattern, string, maxsplit=0, flags=0)
: 根据正则表达式的模式分割字符串,返回一个列表。maxsplit
用于指定最大分割次数。parts = re.split(r'\d+', 'abc123def456ghi789') print(parts) # 输出: ['abc', 'def', 'ghi', '']
-
-
获取匹配对象的详细信息
-
匹配对象(Match object)提供了多个方法和属性来获取匹配详情,如
group()
,start()
,end()
,groups()
等。match = re.search(r'(\d+)-(\d+)-(\d+)', 'Order-123-2023-01') if match: print(match.group(0)) # 整个匹配的字符串: 123-2023-01 print(match.group(1)) # 第一个括号中的匹配: 123 print(match.group(2)) # 第二个括号中的匹配: 2023 print(match.group(3)) # 第三个括号中的匹配: 01
-
常用标志(Flags)
re.IGNORECASE
或re.I
: 忽略大小写。re.MULTILINE
或re.M
: 多行模式,改变^
和$
的行为。re.DOTALL
或re.S
: 让.
匹配包括换行符在内的任意字符。re.VERBOSE
或re.X
: 通过允许你在正则表达式字符串中使用空白和注释来使其更具可读性。
示例
import re
# 忽略大小写匹配
match = re.search(r'hello', 'Hello World', re.IGNORECASE)
if match:
print(match.group()) # 输出: Hello
# 多行模式匹配
text = """First Line
Second Line
Third Line"""
match = re.search(r'^Second', text, re.MULTILINE)
if match:
print(match.group()) # 输出: Second Line
# 让 . 匹配换行符
text = "First Line\nSecond Line"
match = re.search(r'.*', text, re.DOTALL)
if match:
print(match.group()) # 输出: First Line\nSecond Line
re
模块是 Python 中处理字符串的强大工具,通过学习和实践正则表达式,你可以高效地处理和分析文本数据。