Python 的 re
模块提供强大的正则表达式操作,用于字符串的匹配、查找、替换等。以下是 re
模块的一些常用操作及示例:
pythonimport re
re.match()
从字符串的开头开始匹配,返回 Match
对象。如果匹配不成功,返回 None
。
pythonresult = re.match(r'\d+', '123abc') # 匹配数字开头
print(result.group()) # 输出: 123
re.search()
搜索整个字符串,返回第一个匹配的 Match
对象。
pythonresult = re.search(r'\d+', 'abc123xyz') # 搜索字符串中第一个数字部分
print(result.group()) # 输出: 123
re.fullmatch()
要求整个字符串完全匹配,返回 Match
对象。
pythonresult = re.fullmatch(r'\d+', '123') # 整个字符串是数字
print(result.group()) # 输出: 123
re.findall()
返回所有匹配项的列表。
pythonresult = re.findall(r'\d+', 'abc123xyz456')
print(result) # 输出: ['123', '456']
re.finditer()
返回所有匹配项的迭代器,每个项为一个 Match
对象。
pythonmatches = re.finditer(r'\d+', 'abc123xyz456')
for match in matches:
print(match.group()) # 输出: 123, 456
re.sub()
替换匹配的字符串,可以指定替换次数。
pythonresult = re.sub(r'\d+', 'X', 'abc123xyz456')
print(result) # 输出: abcXxyzX
re.subn()
类似于 sub()
,但返回包含新字符串和替换次数的元组。
pythonresult = re.subn(r'\d+', 'X', 'abc123xyz456')
print(result) # 输出: ('abcXxyzX', 2)
re.split()
按照匹配项分割字符串,返回分割后的列表。
pythonresult = re.split(r'\d+', 'abc123xyz456')
print(result) # 输出: ['abc', 'xyz', '']
re.compile()
将正则表达式编译成 Pattern
对象,支持重用和预定义标志。
pythonpattern = re.compile(r'\d+')
result = pattern.findall('abc123xyz456')
print(result) # 输出: ['123', '456']
.
:匹配任意单个字符(除换行符)\d
:匹配任意数字字符,等价于 [0-9]
\D
:匹配非数字字符\w
:匹配任意字母、数字或下划线字符\W
:匹配非字母、数字或下划线字符\s
:匹配空白字符(空格、制表符、换行符等)\S
:匹配非空白字符^
:匹配字符串开头$
:匹配字符串结尾*
:匹配前一个字符 0 次或多次+
:匹配前一个字符 1 次或多次?
:匹配前一个字符 0 次或 1 次{m,n}
:匹配前一个字符 m 到 n 次re
模块提供一些标志,用于调整正则表达式的匹配行为:
re.IGNORECASE
(re.I
):忽略大小写匹配re.MULTILINE
(re.M
):使 ^
和 $
匹配每行的开头和结尾re.DOTALL
(re.S
):使 .
匹配包括换行符在内的所有字符re.VERBOSE
(re.X
):使表达式更具可读性,允许使用空白和注释示例:
pythonpattern = re.compile(r'hello', re.IGNORECASE)
print(pattern.match('Hello')) # 匹配成功,忽略大小写
使用 Match
对象的方法来获取匹配的详细信息:
group()
:返回匹配的字符串start()
:匹配开始的位置end()
:匹配结束的位置span()
:返回 (start, end)
元组,表示匹配范围pythonmatch = re.search(r'\d+', 'abc123xyz')
print(match.group()) # 输出: 123
print(match.start()) # 输出: 3
print(match.end()) # 输出: 6
print(match.span()) # 输出: (3, 6)
本文作者:皓月归尘
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!