正则表达式(Regular expressions,也叫 REs、 regexs 或 regex patterns),本质上是嵌入 Python 内部并通过模块提供的一种微小的、高度专业化的编程语言。
正则常用功能:
1、可以为想要匹配的可能字符串编写规则。这些字符串可能是英文句子、邮箱地址、TeX 命令或任何你喜欢的内容。
2、可以提出诸如“此字符串是否与表达式匹配?”、“字符串中是否存在表达式的匹配项?”之类的问题。
3、可以用正则来修改字符串,或以各种方式将其拆分。
正则的优点: 速度快, 效率⾼, 准确性⾼。
正则的缺点: 新⼿上⼿难度有点⼉⾼。
正则表达式是一种用来匹配字符串模式的表达式。它通过使用特殊的符号和字符组合,定义了一套匹配规则。我们抓取到的⽹⻚源代码本质上就是⼀个超⻓的字符串, 想从⾥⾯提取内容。⽤正则再合适不过了。
元字符: 具有固定含义的特殊符号
常⽤元字符:
- 匹配任意字符
- 匹配字母或数字或下划线
- 匹配数字
- 匹配空白字符
- 匹配换行符
- 匹配制表符
- 匹配非字母或数字或下划线
- 匹配非数字
- 匹配非空白字符
- 匹配单词边界
- 匹配非单词边界
- 匹配字符串的开头
- 匹配字符串的末尾
- 匹配a或b
- 字符集,匹配括号内的任意字符
- 匹配不在括号内的任意字符
- 特征标群,用于匹配与括号内的字符完全相同的字符串
- 转义字符,用于匹配特殊字符,如[]、()、.等
量词: 控制前⾯的元字符出现的次数
- 匹配前面的字符出现0次或无限次
- 匹配前面的字符出现1次或无限次
- 匹配前面的字符出现0次或1次
- 匹配前面的字符出现n次
- 匹配前面的字符出现n到m次
- 匹配前面的字符出现0到m次
- 匹配前面的字符出现n次或无限次
这些符号可以组合使用,形成复杂的匹配规则。
Python的模块提供了一系列函数来使用正则表达式。以下是一些常用函数:
1.
用于从字符串的开始位置匹配正则表达式,如果匹配成功,则返回一个匹配对象;否则返回。
案例解读:此代码匹配一个电话号码格式的字符串,如。正则表达式定义了3个数字、一个、4个数字、再一个、最后是4个数字。
2.
用于在整个字符串中搜索第一个匹配项,即使匹配项不在字符串的开始位置。
案例解读:会在整个字符串中搜索电话号码,找到后返回匹配对象,返回匹配的字符串。
3.
返回所有匹配的字符串,对 string 的扫描从左至右,匹配结果按照找到的顺序返回。 空匹配也包括在结果中,以列表形式返回。
案例解读:会找到所有的数字,输出结果为。
4.
返回通过使用 repl 替换在 string 最左边非重叠出现的 pattern 而获得的字符串。 如果样式没有找到,则不加改变地返回 string。
案例解读:该正则表达式将字符串中的所有数字替换为,输出结果为。
正则表达式不仅可以用于简单的模式匹配,还可以通过分组、断言等方式,处理更复杂的文本。
1. 分组(Groups)
使用括号可以创建捕获组,匹配的内容可以通过方法获取。
案例解读:通过分组,可以分别提取电话号码的各个部分。
2. 贪婪匹配和惰性匹配
1、贪婪匹配: 正则表达式默认是贪婪匹配,即的匹配字符。
- :匹配任意字符,尽可能多的匹配字符(贪婪匹配)。
2、惰性匹配: 在正则表达式中,使用问号?表示该字符为非贪婪匹配,即的匹配字符。
- :匹配任意字符,但尽可能少的匹配字符(惰性匹配)。
默认情况下,正则表达式是贪婪的,尽可能多地匹配字符。通过在量词后面加可以实现非贪婪匹配。
案例解读:贪婪匹配会匹配整个字符串,而只匹配到第一个。
3. 前后向断言(Lookahead 和 Lookbehind)
断言用于检查匹配字符的前后是否满足某种条件。
- 前向断言:,检查后面的内容是否满足。
- 后向断言:,检查前面的内容是否满足。
案例解读:该正则表达式会找到,因为它后面跟着一个空格。
四、实际应用案例
1. 邮箱验证
正则表达式常用于验证邮箱地址的格式。
2. 提取网址中的域名
使用正则表达式从URL中提取域名。
五、总结
正则表达式作为处理字符串的强大工具,在Python的模块中提供了强大的功能。通过掌握正则表达式的基本符号和高级用法,可以轻松处理复杂的文本匹配需求。希望本文通过详细的讲解和实际案例,帮助你更好地理解和运用正则表达式。
推荐阅读
- Python官方文档:https://docs.python.org/zh-cn/3/library/re.html
- 正则表达式速查表:https://www.regex101.com