正则表达式(Regular Expression,简称regex、regexp或RE)是一种强大的文本处理工具,用于描述、匹配和操作字符串模式。它广泛应用于文本搜索、替换、表单验证等多个领域。本教程将帮助你入门并使用正则表达式。
一、正则表达式的基本概念
正则表达式使用单个字符串来描述一系列符合某个句法规则的字符串搜索模式。这些模式可以用于文本的搜索、替换、过滤等操作。正则表达式由普通字符和特殊字符(元字符)组成,通过组合这些字符,可以构建出复杂的匹配规则。
二、常用语法
-
字符匹配
.
:匹配除换行符之外的任意单个字符。[ ]
:匹配括号内的任意一个字符。例如,[abc]
匹配a
、b
或c
。[^ ]
:匹配不在括号内的任意字符。例如,[^abc]
匹配除a
、b
、c
之外的任意字符。\d
:匹配任意数字,等价于[0-9]
。\w
:匹配任意字母、数字或下划线,等价于[a-zA-Z0-9_]
。\s
:匹配任意空白字符,包括空格、制表符、换行符等。
-
数量词
*
:匹配前面的字符零次或多次。+
:匹配前面的字符一次或多次。?
:匹配前面的字符零次或一次。{n}
:匹配前面的字符恰好n次。{n,}
:匹配前面的字符至少n次。{n,m}
:匹配前面的字符至少n次,至多m次。
-
位置匹配
^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词边界。\B
:匹配非单词边界。
-
转义字符
\
:用于转义特殊字符,使其变为普通字符。例如,\.
匹配点号.
本身。
-
分组与捕获
()
:用于分组,可以捕获匹配的子串。例如,(abc)+
匹配一个或多个连续的abc
。|
:逻辑或操作符,用于匹配多个选项之一。例如,a|b
匹配a
或b
。
-
三、实例演示
-
匹配邮箱地址
^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$
解释:以字母或数字开头,后面跟着
@
符号,然后是字母或数字的域名部分,最后是以点号开头的顶级域名(至少两个字母)。 -
匹配电话号码
^\d{3}-\d{4}-\d{4}$
解释:匹配格式为
XXX-XXXX-XXXX
的电话号码,其中X
代表数字。 -
提取HTML标签中的内容
<(.*?)>(.*?)</\1>
解释:匹配HTML标签及其内容,其中
\1
表示第一个捕获组,即标签名。 -
匹配以字母
a
开头的单词\ba\w*\b
-
匹配包含数字的字符串
\d+
-
匹配以
abc
结尾的字符串.*abc$
实例演示
-
验证邮箱地址
import re def val_email(email): pattern = r"^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,}$" if re.match(pattern, email): print("有效的email") else: print("无效的email!!") val_email(email="snb@smartnotebook.tech")
-
从字符串中提取数字
-
import re def extract_numbers(text): pattern = r"\d+" return re.findall(pattern, text) print(extract_numbers("There are over 1000 views of Snb's articles."))
-
验证电话号码
import re def is_valid_phone_number(phone_number): pattern = r"^\d{3}-\d{4}-\d{4}$" return bool(re.match(pattern, phone_number)) print(is_valid_phone_number("137-1234-5678"))