正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
在 Python 中,使用 re 模块提供的函数来处理正则表达式,允许你在字符串中进行模式匹配、搜索和替换操作。
1 正则表达式
正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),可以用来描述和匹配字符串的特定模式。
正则表达式是一种用于模式匹配和搜索文本的工具。
正则表达式提供了一种灵活且强大的方式来查找、替换、验证和提取文本数据。
下面先给出一个简单的示例:
^
为匹配输入字符串的开始位置。[0-9]+
匹配多个数字,[0-9]
匹配单个数字,+
匹配一个或者多个。abc$
匹配字母 abc 并以 abc 结尾,$
为匹配输入字符串的结束位置。
再举一个例子,只允许用户名包含字符、数字、下划线和连接字符 -:
^
表示匹配字符串的开头。- `[a-zA-Z0-9_-]`` 表示字符集,包含小写字母、大写字母、数字、下划线和连接字符 -。
{3,15}
表示前面的字符集最少出现 3 次,最多出现 15 次,从而限制了用户名的长度在 3 到 15 个字符之间。$
表示匹配字符串的结尾。
以上的正则表达式可以匹配 runoob、runoob1、run-oob、run_oob, 但不匹配 ru,因为它包含的字母太短了,小于 3 个无法匹配。也不匹配 runoob$, 因为它包含特殊字符。
1.1 正则表达式元字符和特性
1.1.1 字符匹配
普通字符: 普通字符按照字面意义进行匹配,例如匹配字母 “a” 将匹配到文本中的 “a” 字符。
元字符: 元字符具有特殊的含义,例如 \d 匹配任意数字字符,\w 匹配任意字母数字字符,. 匹配任意字符(除了换行符)等。
1.1.2 量词
*
:匹配前面的模式零次或多次。+
:匹配前面的模式一次或多次。?
:匹配前面的模式零次或一次。{n}
:匹配前面的模式恰好 n 次。{n,}
:匹配前面的模式至少 n 次。{n,m}
:匹配前面的模式至少 n 次且不超过 m 次。
1.1.3 字符类
[ ]
:匹配括号内的任意一个字符。例如,[abc] 匹配字符 “a”、“b” 或 “c”。[^ ]
:匹配除了括号内的字符以外的任意一个字符。例如,[^abc]
匹配除了字符 “a”、“b” 或 “c” 以外的任意字符。
1.1.4 边界匹配
^
:匹配字符串的开头。$
:匹配字符串的结尾。\b
:匹配单词边界。\B
:匹配非单词边界。
1.1.5 分组和捕获
( )
:用于分组和捕获子表达式。(?: )
:用于分组但不捕获子表达式。
特殊字符\
:转义字符,用于匹配特殊字符本身。.
:匹配任意字符(除了换行符)。|
:用于指定多个模式的选择。
详细教程参考:https://www.runoob.com/regexp/regexp-tutorial.html
2 Python的正则表达式处理模块
2.1 re.match
函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。
函数语法:
re.match(pattern, string, flags=0)
'''
- pattern 匹配的正则表达式
- string 要匹配的字符串。
- flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志
'''
import re
print(re.match('www', 'www.runoob.com')) # 在起始位置匹配
print(re.match('com', 'www.runoob.com')) # 不在起始位置匹配
运行结果:
第一个输出的是(0,3)
,即匹配成功的索引,第二个虽然原字符串中有,但不是从起始位置开始匹配成功的,所以输出None
匹配成功 re.match 方法返回一个匹配的对象,否则返回 None。 我们可以使用 group(num)
或 groups()
匹配对象函数来获取匹配表达式。