正则表达式(Regular Expressions,简称正则或regex)是一种用于匹配字符串中字符组合的模式。它在文本处理、数据验证和字符串操作中非常有用。以下是正则表达式的一些常见用法及示例:
基础概念
-
字面量匹配:直接匹配字符
r"hello" -
元字符:具有特殊含义的字符,如
.、^、$、*、+、?、{}、[]、|、()等。 -
转义字符:用于匹配元字符本身,使用反斜杠
\r"\."
常见元字符及用法
-
.:匹配任意单个字符(换行符除外)r"a.b" # 可以匹配 "acb", "a2b", "a b" 等 -
^:匹配字符串的开头r"^hello" # 匹配以 "hello" 开头的字符串 -
$:匹配字符串的结尾r"world$" # 匹配以 "world" 结尾的字符串 -
*:匹配前面的字符0次或多次r"ab*c" # 可以匹配 "ac", "abc", "abbc" 等 -
+:匹配前面的字符1次或多次r"ab+c" # 可以匹配 "abc", "abbc" 等,但不匹配 "ac" -
?:匹配前面的字符0次或1次r"ab?c" # 可以匹配 "ac", "abc" -
{n}:匹配前面的字符恰好n次r"ab{2}c" # 只能匹配 "abbc" -
{n,m}:匹配前面的字符至少n次,至多m次r"ab{2,4}c" # 可以匹配 "abbc", "abbbc", "abbbbc"
字符类
-
[]:匹配方括号中的任意字符r"[abc]" # 可以匹配 "a", "b", "c" 中的任意一个 -
[^]:匹配不在方括号中的任意字符r"[^abc]" # 可以匹配除 "a", "b", "c" 之外的任意字符 -
范围:
r"[a-z]" # 匹配小写字母 r"[A-Z]" # 匹配大写字母 r"[0-9]" # 匹配数字
预定义字符类
-
\d:匹配任何数字,相当于[0-9]r"\d" # 匹配数字 -
\D:匹配任何非数字字符,相当于[^0-9]r"\D" # 匹配非数字字符 -
\w:匹配任何字母数字字符,相当于[a-zA-Z0-9_]r"\w" # 匹配字母或数字或下划线 -
\W:匹配任何非字母数字字符,相当于[^a-zA-Z0-9_]r"\W" # 匹配非字母或数字或下划线的字符 -
\s:匹配任何空白字符,包括空格、制表符、换页符等r"\s" # 匹配空白字符 -
\S:匹配任何非空白字符r"\S" # 匹配非空白字符
边界匹配
-
\b:匹配一个单词边界r"\bword\b" # 匹配单词 "word" -
\B:匹配非单词边界r"\Bword\B" # 匹配 "password" 中的 "word"
分组与捕获
-
():用于分组,捕获匹配的子串r"(abc)" # 匹配 "abc" 并捕获 -
(?:):非捕获分组r"(?:abc)" # 匹配 "abc" 但不捕获 -
\n:引用分组,n是分组号r"(a)(b)\1\2" # 匹配 "abab"
选择与管道
|:匹配左边或右边的表达式r"abc|def" # 匹配 "abc" 或 "def"
贪婪与懒惰匹配
-
贪婪匹配:尽可能多地匹配字符,默认模式
r"a.*b" # 匹配从第一个 "a" 到最后一个 "b" 之间的所有字符 -
懒惰匹配:尽可能少地匹配字符,使用
?r"a.*?b" # 匹配从第一个 "a" 到第一个 "b" 之间的所有字符
示例应用
-
匹配电子邮件地址:
r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" -
匹配URL:
r"https?://(?:www\.)?[a-zA-Z0-9./]+" -
匹配电话号码:
r"\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}" -
匹配日期(格式:YYYY-MM-DD):
r"\d{4}-\d{2}-\d{2}"
Python中使用正则表达式
在Python中,可以使用re模块来处理正则表达式。常用函数包括:
-
re.match:从字符串的起始位置匹配import re pattern = r"hello" result = re.match(pattern, "hello world") -
re.search:搜索整个字符串匹配result = re.search(pattern, "say hello world") -
re.findall:找到所有匹配result = re.findall(pattern, "hello hello world") -
re.sub:替换匹配项result = re.sub(r"hello", "hi", "hello world")