正则表达式(Regular Expressions, 简称 regex 或 RE)是一种强大的工具,用于匹配和操作字符串。Python 中的 re
模块提供了一整套操作正则表达式的功能,使得我们可以轻松地对字符串进行搜索、匹配、替换等操作。下面详细阐述正则表达式的使用及其常用操作。
1. 正则表达式基础
正则表达式由普通字符和特殊字符(也称为元字符)组成。元字符用于指定字符串的模式。以下是一些常用的元字符:
.
: 匹配任意单个字符,除换行符外。^
: 匹配字符串的开始。$
: 匹配字符串的结尾。*
: 匹配前一个字符 0 次或多次。+
: 匹配前一个字符 1 次或多次。?
: 匹配前一个字符 0 次或 1 次。[]
: 匹配括号内的任意字符,例如[a-z]
表示匹配任意小写字母。\
: 转义字符,用于匹配元字符本身,比如\.
匹配.
,\\
匹配\
。
2. re
模块的常用操作
Python 的 re
模块提供了多种操作正则表达式的方法,常用的包括 match()
, search()
, findall()
, sub()
等。
2.1 re.match()
re.match(pattern, string, flags=0)
用于从字符串的开头匹配正则表达式。如果开头部分匹配成功,返回一个匹配对象;否则返回 None
。
import re
pattern = r'\d+'
string = "123abc456"
match = re.match(pattern, string)
if match:
print("Match found:", match.group()) # 输出: Match found: 123
else:
print("No match")
注意:match()
只从字符串的开始位置进行匹配,如果字符串开头不符合正则表达式,则返回 None
。
2.2 re.search()
re.search(pattern, string, flags=0)
用于在整个字符串中搜索与正则表达式匹配的第一个位置。如果找到,返回一个匹配对象;否则返回 None
。
import re
pattern = r'\d+'
string = "abc123def456"
search = re.search(pattern, string)
if search:
print("Search found:", search.group()) # 输出: Search found: 123
else:
print("No match")
与 match()
不同,search()
可以匹配字符串中的任意位置。
2.3 re.findall()
re.findall(pattern, string, flags=0)
返回字符串中所有与正则表达式匹配的非重叠匹配项,以列表形式返回。
import re
pattern = r'\d+'
string = "abc123def456"
matches = re.findall(pattern, string)
print("Findall results:", matches) # 输出: Findall results: ['123', '456']
findall()
是最常用的函数之一,它可以提取所有符合条件的字符串片段。
2.4 re.sub()
re.sub(pattern, repl, string, count=0, flags=0)
用于替换字符串中所有匹配正则表达式的部分。repl
可以是一个字符串或一个函数,用于替换匹配到的部分。
import re
pattern = r'\d+'
string = "abc123def456"
replaced_string = re.sub(pattern, "#", string)
print("Sub result:", replaced_string) # 输出: Sub result: abc#def#
sub()
函数常用于字符串的清理和格式化。
3. 其他常用函数
re.split(pattern, string, maxsplit=0, flags=0)
: 按照正则表达式的匹配项将字符串分割为列表。
import re
pattern = r'\d+'
string = "abc123def456"
splitted_list = re.split(pattern, string)
print("Split result:", splitted_list) # 输出: Split result: ['abc', 'def', '']
re.compile(pattern, flags=0)
: 将正则表达式编译成正则表达式对象,以提高匹配效率。
import re
pattern = re.compile(r'\d+')
string = "abc123def456"
matches = pattern.findall(string)
print("Compiled findall results:", matches) # 输出: Compiled findall results: ['123', '456']
4. 总结
正则表达式是处理字符串的利器,它可以高效地执行匹配、搜索、替换等操作。在 Python 中,re
模块提供了丰富的函数来使用正则表达式。match()
用于从字符串开头匹配,search()
在字符串中搜索第一个匹配项,findall()
返回所有匹配项,sub()
替换匹配项。掌握这些基本操作,可以大大提升处理字符串的效率。
此外,正则表达式还支持很多高级特性,如捕获组、非捕获组、前瞻和后顾等,使得它在复杂字符串处理任务中更加得心应手。