Python3进阶(二) | 正则表达式
发布日期:2021-05-10 06:27:20 浏览次数:31 分类:精选文章

本文共 2771 字,大约阅读时间需要 9 分钟。

正则表达式

正则表达式是一个强大而灵活的工具,用于匹配字符串中的特定模式。Python的re模块提供了完整的正则表达式功能,支持复杂的匹配场景。

1.1 re.match函数

re.match用于从字符串的起始位置尝试匹配正则表达式。如果匹配不在起始位置进行,函数将返回None。

语法

re.match(pattern, string, flags=0)

参数说明

  • pattern:匹配的正则表达式。
  • string:要匹配的字符串。
  • flags:正则表达式的标志位,控制匹配方式,如忽略大小写、多行模式等。

方法

  • group(num=0):返回匹配表达式所对应的字符串,可指定多个组数返回对应的元组。
  • groups():返回所有小组字符串的元组,从第1组开始编号。

示例

import re  
print(re.match('https', 'https://github.com').group())
print(re.match('com', 'https://github.com'))

1.2 re.search方法

re.search方法会扫描整个字符串,返回第一个匹配的子串。如果未找到匹配,返回None。

语法

re.search(pattern, string, flags=0)

参数说明

  • pattern:正则表达式。
  • string:要匹配的字符串。
  • flags:匹配标志位。

方法

  • group(num=0):返回匹配表达式所对应的字符串。
  • groups():返回所有小组字符串的元组。

示例

import re  
print(re.search('https', 'http://github.com').group())
print(re.search('com', 'https://github.com'))

1.3 re.match与re.search的区别

re.match仅在字符串起始位置进行匹配,匹配不成功则返回None。re.search则会扫描整个字符串,寻找第一个匹配点。

2. 检索和替换

re.sub功能强大,支持字符串替换、多种替换模式以及分组查找。

语法

re.sub(pattern, repl, string, count=0, flags=0)

参数说明

  • pattern:正则表达式。
  • repl:替换字符串,可以是一个常量或一个函数。
  • string:原始字符串。
  • count:匹配次数限制, 默认为0,表示替换所有匹配。
  • flags:正则表达式标志位。

示例

import re  
num = re.sub(r'-.*$', "", 'hello world -hello python')
print(num)

2.1 compile函数

re.compile用于创建一个正则表达式对象,用于高效进行多次匹配。

语法

re.compile(pattern[, flags])

参数说明

  • pattern:正则表达式字符串。
  • flags:编译标志位,可选。

2.2 findall方法

findall用于在字符串中找到所有匹配正则表达式的子串,返回一个列表。

语法

re.findall(string[, pos[, endpos]])

参数说明

  • string:待匹配字符串。
  • pos:起始位置,默认为0。
  • endpos:结束位置,默认为字符串长度。

示例

import re  
result = re.findall(r'\d+', '1we22a32refbc43jf3')
print(result)

2.3 finditer方法

finditer类似于findall,但返回的是一个迭代器,逐个提供每个匹配结果。

语法

re.finditer(pattern, string, flags=0)

参数说明

  • pattern:正则表达式。
  • string:要匹配的字符串。
  • flags:正则表达式标志位。

示例

import re  
for match in re.finditer(r'\d+', '1we22a32refbc43jf3'):
print(match.group())

2.4 split方法

split方法根据正则表达式分割字符串,支持设置最大分割次数。

语法

re.split(pattern, string[, maxsplit=0, flags=0])

参数说明

  • pattern:分割正则表达式。
  • string:要分割的字符串。
  • maxsplit:分割次数,0表示无限制。
  • flags:正则表达式标志位。

示例

import re  
parts = re.split(r'_[\d]+', 'hello_world_123')
print(parts)

3. 正则表达式对象

匹配结果可以通过正则表达式对象获取详细信息,如匹配位置、组数以及更多属性。

  • group():返回匹配表达式对应的字符串。
  • start():返回匹配的起始位置。
  • end():返回匹配的结束位置。
  • span():返回匹配的起始和结束位置作为元组。

4. 正则表达式修饰符

正则表达式支持多种修饰符,通过按位或操作指定。常见修饰符:

修饰符 描述
re.I 忽略大小写
re.L 本地化匹配
re.M 多行模式
re.S 使.匹配所有字符
re.U 面向Unicode的字符集
re.X 忽略注释

5. 正则表达式模式

正则表达式模式包含多种特殊字符,用于高效匹配字符串特征:

特殊字符 快速描述
^ 匹配字符串开头
$ 匹配字符串结尾
. 匹配任意字符(不含换行,需re.DOTALL标记时也匹配换行)
[^...] 排除字符匹配
\d 匹配数字
\W 匹配非数字字符
\b 匹配单词边界
(?) 括号表示组或特殊模式

6. 示例与应用

6.1 字符匹配

  • python
import re  
if re.match(r'python', 'python123'):
print("匹配成功)

6.2 字符类匹配

  • 背括号表达式:
if re.match(r'([Jj])ava', 'JAVA'):
print("匹配成功")

6.3 综合匹配

  • 完全匹配:
pattern = r'^\d{3}-\d{2}-\d{4}$'
num = '123-45-6789'
if re.fullmatch(pattern, num):
print("电话号码格式正确")

7. 高级应用

通过正则表达式可以实现多种复杂操作,如日期格式验证、HTML标签提取、文本替换等,这些功能使其成为开发中不可或缺的工具。

上一篇:Python3进阶(三) | SMTP发送邮件(发送不同格式、附件)
下一篇:常用正则表达式(重要)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月18日 11时59分07秒