博客
关于我
Python——正则表达式语法与实践
阅读量:797 次
发布时间:2023-03-28

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

正则表达式入门与实践指南

正则表达式(Regular Expression, 简称 Regex)是一种强大的文本匹配工具,广泛应用于字符串处理、文本解析等场景。通过正则表达式,可以定义复杂的文本模式,从而实现文本的匹配、提取或替换操作。

正则表达式基础

正则表达式由多个特殊符号和元字符组成,每个符号都有特定的意义。以下是常见符号的解释及其示例:

符号 解释 示例 说明
. 匹配任意字符 b.t 可匹配 bat / but / b#t
\w 匹配字母、数字、下划线 b\wt 可匹配 bat / b1t / b_t,但不能匹配 b#t
\s 匹配空白字符(\r, \n, \t 等) love\syou 可匹配 love you
\d 匹配数字 \d\d 可匹配 01 / 23 / 99
\b 匹配单词边界 \bThe\b 匹配单词边界处的 The
^ 匹配字符串开头 ^The 可匹配以 The 开头的字符串
$ 匹配字符串结尾 .exe$ 可匹配以 .exe 结尾的字符串
\W 匹配非字母、数字、下划线 b\Wt 可匹配 b#t / b@t,但不能匹配 but / b1t
\S 匹配非空白字符 love\Syou 可匹配 love#you,但不能匹配 love you
\D 匹配非数字 \d\D 可匹配 9a / 3# / 0F
\B 匹配非单词边界 \Bio\B 匹配非单词边界处的 io
[ ] 匹配字符集中的任意字符 [aeiou] 匹配任意元音字母
[^ ] 匹配不在字符集中的任意字符 [^aeiou] 匹配任意非元音字母
* 匹配0次或多次 \w* 可匹配空字符串或多个字母/数字/下划线
+ 匹配1次或多次 \w+ 至少匹配一个字母/数字/下划线
? 匹配0次或1次 \w? 可匹配空字符串或一个字母/数字/下划线
{n} 匹配恰好n次 \w{3} 匹配长度为3的字母/数字/下划线
{m,n} 匹配m到n次 \w{3,6} 匹配3到6个字母/数字/下划线
\ 开启分支 foo\ 开启分支,后续与分支相关符号
(?#) 注释 (?#注释) 注释正则表达式
( ) 分支 (\w+) 分支匹配
(?i) 忽略大小写 (?i)Hello 可匹配 hello / HELLO
(?m) 多行匹配 (?m)^hello$ 多行模式匹配

Python对正则表达式的支持

Python 提供了 re 模块,支持多种正则表达式操作。常用的函数包括:

函数 说明
compile(pattern, flags=0) 编译正则表达式,返回正则表达式对象
match(pattern, string, flags=0) 从字符串开头匹配正则表达式,返回匹配对象或 None
search(pattern, string, flags=0) 在字符串中搜索正则表达式,返回第一个匹配对象或 None
split(pattern, string, maxsplit=0, flags=0) 用正则表达式分隔字符串,返回列表
sub(pattern, repl, string, count=0, flags=0) 用正则表达式替换字符串中的匹配部分,返回替换后的字符串
fullmatch(pattern, string, flags=0) 完全匹配字符串,要求字符串从开头到结尾都与正则表达式匹配
findall(pattern, string, flags=0) 找到字符串中所有与正则表达式匹配的部分,返回列表
finditer(pattern, string, flags=0) 返回一个迭代器,用于找到所有匹配项
purge() 清除编译缓存

正则表达式匹配标记(flags 参数)可以用于设置多种模式,例如 re.IGNORECASE 忽略大小写,re.MULTILINE 启用多行模式。

实践案例

1. 用户验证

需求:验证用户名和QQ号的有效性。

规则

  • 用户名:6~20个字符,允许字母、数字、下划线。
  • QQ号:11位,首位不能为0,后面8位任意数字。

正则表达式

^[0-9a-zA-Z_]{6,20}$  # 用户名^1\d{10}$               # QQ号

2. 提取国内手机号码

规则:手机号为11位,首位为1、3、4、5、6、7、8、9,后面随机8位数字。

正则表达式

(?

3. 替换不良内容

需求:替换字符串中的脏话和不良词汇。

正则表达式

[\w]*\b(fuck|shit|damn)\b[\w]*  # 脏话傻[比屄逼叉缺吊屌]  # 不良用语

4. 拆分长字符串

需求:将一段长文本拆分为短句。

正则表达式

[,。, .]

常用正则表达式

以下是常见文本模式的正则表达式:

1. 邮箱

[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)

2. 身份证号

[1-9]\d{5}(?:18|19|[23]\d)\d{2}(?:0[1-9]|10|11|12)(?:[0-2][1-9]|10|20|30|31)\d{3}[0-9Xx]

3. 国内手机号码

1[356789]\d{9}

4. 国内固定电话

\d{3}-\d{8}|\d{4}-\d{7}

5. 域名

(?:(?:http://)|(?:https://))?(?:[\w](?:[\w-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:/)

6. IP地址

((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))

7. 日期

\d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2}

8. 邮政编码

[1-9]\d{5}(?!\d)

9. 密码

普通密码

[a-zA-Z]\w{5,17}

强密码

[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}

10. 中文字符

[\u4e00-\u9fa5]

11. 数字

^\d+$  # 非负整数^-?\d+$  # 可能带负号的整数

12. 字符串

^[A-Za-z0-9]+$  # 英文和数字混合^.{3,20}$  # 长度3-20的任意字符

通过合理运用正则表达式,可以高效地处理各种文本数据,实现精确的模式匹配和文本处理任务。

转载地址:http://gohfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现攀登 n 级楼梯的不同方式算法(附完整源码)
查看>>
Objective-C实现改变图片亮度算法(附完整源码)
查看>>
Objective-C实现数乘以二multiplyByTwo算法(附完整源码)
查看>>
Objective-C实现数字图像处理算法(附完整源码)
查看>>
Objective-C实现数组切片(附完整源码)
查看>>
Objective-C实现数组去重(附完整源码)
查看>>
Objective-C实现数组的循环左移(附完整源码)
查看>>
Objective-C实现数除以二divideByTwo算法(附完整源码)
查看>>
Objective-C实现整数N以内的质数算法(附完整源码)
查看>>
Objective-C实现文件分割(附完整源码)
查看>>
Objective-C实现文件拷贝(附完整源码)
查看>>
Objective-C实现文件断点传输(附完整源码)
查看>>
Objective-C实现文件的删除、复制与重命名操作实例(附完整源码)
查看>>
Objective-C实现无序表查找算法(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现无锁链表(附完整源码)
查看>>
Objective-C实现时间戳转为年月日时分秒(附完整源码)
查看>>
Objective-C实现是否为 Pythagoreantriplet 毕氏三元数组算法(附完整源码)
查看>>
Objective-C实现显示响应算法(附完整源码)
查看>>
Objective-C实现晚捆绑测试实例(附完整源码)
查看>>