正则表达式

是指定一组与之匹配的字符串,

限定符号

a* a出现0或者多次

a+ a出现1次或者多次

a? a出现0次或者1次

a{2,5} 出现在2到5次之间

或运算法

(cat|dog) 匹配 cat或者dog

字符类

abz+ 表示匹配的字符只能是中括号中的字母 如果使用了 ^则为取反符号

元字符、 /d 代表数字字符

/w代表英文字符数字加上下划线

/s代表tab和换行符

其中/加大写的DWS则表示取反符号

.表示任意字符 不包括换行符号

^a 匹配行首的 a$只匹配行尾

正向先行断言

例如正则表达式 (T|t)he(?=\sfat),表示:匹配大写字母 T 或小写字母 t,后面跟字母 h,后跟字母 e。 在括号中,我们定义了正向先行断言,它会引导正则表达式引擎匹配后面跟着 fat 的 The 或 the。

复制代码
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.

负向先行断言

当我们需要指定第一部分表达式的后面不跟随某一内容时,使用负向先行断言。负向先行断言的定义跟我们定义的正向先行断言一样, 唯一的区别在于我们使用否定符号 ! 而不是等号 =,例如 (?!...)。 我们来看看下面的正则表达式 (T|t)he(?!\sfat),表示:从输入字符串中获取全部 The 或者 the 且不匹配 fat 前面加上一个空格字符。

复制代码
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.

正向后行断言

正向后行断言用于获取跟随在特定模式之后的所有匹配内容。正向后行断言表示为 (?<=...)。例如正则表达式 (?<=(T|t)he\s)(fat|mat),表示:从输入字符串中获取在单词 The 或 the 之后的所有 fat 和 mat 单词。

复制代码
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.

负向后行断言

负向后行断言是用于获取不跟随在特定模式之后的所有匹配的内容。负向后行断言表示为 (?<!...)。例如正则表达式 (?<!(T|t)he\s)(cat),表示:在输入字符中获取所有不在 The 或 the 之后的所有单词 cat。

复制代码
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.

贪婪/懒惰匹配

<.+>默认匹配任意字符

<.+?> 懒惰匹配任意字符

|------|--------|
| ?= | 正向先行断言 |
| ?! | 负向先行断言 |
| ?<= | 正向后行断言 |
| ?<! | 负向后行断言 |

标记 描述
i 不区分大小写:将匹配设置为不区分大小写。
g 全局搜索:搜索整个输入字符串中的所有匹配。
m 多行匹配:会匹配输入字符串每一行。

函数

match 在字符串的开头进行匹配

re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 None。

复制代码
re.match(pattern, string, flags=0)

re.search 扫描整个字符串并返回第一个成功的匹配。

函数语法:

复制代码
re.search(pattern, string, flags=0)

函数参数说明:

参数 描述
pattern 匹配的正则表达式
string 要匹配的字符串。
flags 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。参见:正则表达式修饰符 - 可选标志

search 在整个字符串中进行匹配

常用正则表达式

  • 正整数 :^\d+$
  • 负整数 :^-\d+$
  • 电话号码 :^+?[\d\s]{3,}$
  • 电话代码 :^+?[\d\s]+(?[\d\s]{10,}$
  • 整数 :^-?\d+$
  • 用户名 :^[\w\d_.]{4,16}$
  • 字母数字字符 :^[a-zA-Z0-9]*$
  • 带空格的字母数字字符 :^[a-zA-Z0-9 ]*$
  • 密码 :^(?=^.{6,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$
  • 电子邮件 :^([a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4})*$
  • IPv4 地址 :^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))*$
  • 小写字母 :^([a-z])*$
  • 大写字母 :^([A-Z])*$
  • 网址 :^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
  • VISA 信用卡号码 :^(4[0-9]{12}(?:[0-9]{3})?)*$
  • 日期(MM/DD/YYYY) :^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
  • 日期(YYYY/MM/DD) :^(19|20)?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])$
  • 万事达信用卡号码 :^(5[1-5][0-9]{14})*$
相关推荐
只愿云淡风清5 天前
正则表达式学习笔记 02:基础语法
笔记·学习·正则表达式
Frag0ut10 天前
Notepad++ 正则表达式完全手册:文本处理的终极武器(2026实战版)
正则表达式·notepad++·数据清洗·日志分析·正则替换·提取ip·正则表达式实战
Patrick在香港13 天前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
echome88813 天前
Python 正则表达式:5 个日常够用的模式
python·正则表达式
yivifu14 天前
能够使用Python正则表达式函数的文本处理工具——Calibre电子书编辑器
正则表达式
全栈陈序员15 天前
【Python】基础语法入门(二十九)—— 正则表达式实战:文本处理利器
开发语言·人工智能·python·正则表达式
BruceXu21 天前
\b 在中文里会静默失效:三个正则坑和一份能用的字符边界方案
正则表达式
阿昭L22 天前
正则表达式
正则表达式·编译原理
波力海苔夹心脆67522 天前
C# 正则表达式零基础入门:从“看得懂“到“会用“
经验分享·后端·mysql·正则表达式·c#
FRing0324 天前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式