本文共 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 提供了 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 启用多行模式。
需求:验证用户名和QQ号的有效性。
规则:正则表达式:
^[0-9a-zA-Z_]{6,20}$ # 用户名^1\d{10}$ # QQ号 规则:手机号为11位,首位为1、3、4、5、6、7、8、9,后面随机8位数字。
正则表达式:
(?
需求:替换字符串中的脏话和不良词汇。
正则表达式:[\w]*\b(fuck|shit|damn)\b[\w]* # 脏话傻[比屄逼叉缺吊屌] # 不良用语
需求:将一段长文本拆分为短句。
正则表达式:[,。, .]
以下是常见文本模式的正则表达式:
[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)
[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] 1[356789]\d{9} \d{3}-\d{8}|\d{4}-\d{7} (?:(?:http://)|(?:https://))?(?:[\w](?:[\w-]{0,61}[\w])?\.)+[a-zA-Z]{2,6}(?:/) ((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d)) \d{4}(?:-|\/|.)\d{1,2}(?:-|\/|.)\d{1,2} [1-9]\d{5}(?!\d) 普通密码:
[a-zA-Z]\w{5,17} 强密码:
[a-zA-Z](?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10} [\u4e00-\u9fa5]
^\d+$ # 非负整数^-?\d+$ # 可能带负号的整数
^[A-Za-z0-9]+$ # 英文和数字混合^.{3,20}$ # 长度3-20的任意字符 通过合理运用正则表达式,可以高效地处理各种文本数据,实现精确的模式匹配和文本处理任务。
转载地址:http://gohfk.baihongyu.com/