Python 中的正则表达式是通过内置模块 re
来实现的。正则表达式是一种用于模式匹配和文本处理的强大工具,可以用于查找、替换、分割字符串等操作。
以下是 re
模块中一些常用的函数和方法:
re.compile(pattern, flags=0)
:编译正则表达式模式,返回一个模式对象。re.search(pattern, string, flags=0)
:在整个字符串中搜索模式,返回第一个匹配对象。re.match(pattern, string, flags=0)
:从字符串的起始位置开始匹配模式,返回匹配对象。re.findall(pattern, string, flags=0)
:返回字符串中所有非重叠匹配的列表。re.finditer(pattern, string, flags=0)
:返回字符串中所有非重叠匹配的迭代器。re.sub(pattern, repl, string, count=0, flags=0)
:替换字符串中所有匹配模式的子串。re.split(pattern, string, maxsplit=0, flags=0)
:使用模式分割字符串,返回分割后的列表。以下是一些示例代码,展示了如何使用上述函数:
import re
# 定义一个正则表达式模式
pattern = r'\d+' # 匹配一个或多个数字
# 在字符串中搜索
string = "The price is 100 dollars and 50 cents"
match = re.search(pattern, string)
if match:
print(f"Found: {match.group()}") # 输出: Found: 100
# 从字符串起始位置开始匹配
match = re.match(pattern, string)
if match:
print(f"Match from start: {match.group()}")
else:
print("No match from start") # 输出: No match from start
# 查找所有匹配项
matches = re.findall(pattern, string)
print(f"All matches: {matches}") # 输出: All matches: ['100', '50']
# 迭代匹配项
for match in re.finditer(pattern, string):
print(f"Iter match: {match.group()}") # 输出: Iter match: 100, Iter match: 50
# 替换匹配项
replaced_string = re.sub(pattern, '#', string)
print(f"Replaced string: {replaced_string}") # 输出: Replaced string: The price is # dollars and # cents
# 分割字符串
split_string = re.split(r'\s+', string) # 按空白字符分割
print(f"Split string: {split_string}") # 输出: Split string: ['The', 'price', 'is', '100', 'dollars', 'and', '50', 'cents']
正则表达式的语法非常丰富,以下是一些常用的语法元素:
.
:匹配任意单个字符(除换行符)。^
:匹配字符串的开始。$
:匹配字符串的结束。*
:匹配前一个字符零次或多次。+
:匹配前一个字符一次或多次。?
:匹配前一个字符零次或一次。{n}
:匹配前一个字符恰好 n 次。{n,}
:匹配前一个字符至少 n 次。{n,m}
:匹配前一个字符至少 n 次,但是不超过 m 次。[]
:匹配括号内的任意一个字符,例如 [abc]
匹配 a
、b
或 c
。|
:匹配左边或右边的表达式,例如 a|b
匹配 a
或 b
。()
:捕获组,用于提取匹配的子串。有些字符在正则表达式中有特殊含义,如果你想匹配它们的字面意思,需要使用转义字符 \
,例如:
\.
:匹配字符 .
。\\
:匹配字符 \
。re
模块支持一些修饰符,用于改变正则表达式的行为:
re.IGNORECASE
(re.I
):忽略大小写。re.MULTILINE
(re.M
):多行模式,^
和 $
匹配每一行的开始和结束。re.DOTALL
(re.S
):让 .
匹配所有字符,包括换行符。re.VERBOSE
(re.X
):忽略模式中的空白符和注释,以便提高可读性。pattern = re.compile(r"""
\d+ # 匹配一个或多个数字
\s+ # 匹配一个或多个空白字符
\w+ # 匹配一个或多个字母数字字符
""", re.VERBOSE)
掌握正则表达式可以大大提高处理字符串的效率和灵活性。