正则表达式学习笔记
2021-10-15 17:17:04 1 举报
AI智能生成
正则表达式学习笔记,源自于极客时间上的正则表达式课程的学习,记录常用的语法,便于随时查看
作者其他创作
大纲/内容
分组与引用
功能
将某部分作为一个整体
在后续环节需要重复引用
分组编号
第几个括号,就是第几组,从1开始,括号嵌套依然适用
分组会自动捕获,用于后面复用方便,(?:)表示不捕获
命名分组:(?P<命名>...)
分组引用
\number
不同语言,比如js可能是$number
查找、替换中均可以适用分组引用
匹配模式
模式使用方式
(?模式修饰符)正则,即放到正则的开头
((?i)csc)xxx,表示只有csc那块不区分大小写
js中是/regex/i,模式在正则之后
不区分大小写
不区分大小写模式的指定方式,使用模式修饰符 (?i)
修饰符如果在括号内,作用范围是这个括号内的正则,而不是整个正则
使用编程语言时可以使用预定义好的常量来指定匹配模式
re.findall(r"cat", "CAT Cat cat", re.IGNORECASE)
点号通配符模式
多行模式
注释模式
断言
正则中是指对匹配文本的位置进行限定
分类
单词边界
\b表示单词的边界
re.sub(r"\btom\b", "jerry", "tom cat tommorrow")
行开始/结束
^ 行开始
$ 行结尾
\A 和\z匹配整个字符串的开始和结束
环视
也称为“零宽断言”
用于限定匹配文本左右的内容
分类
(?<=YYY)左边为YYY的目标文本
(?<!YYY)左边不是YYY的目标文本
(?=YYY)右边是YYY的目标文本
(?!YYY)右边不是YYY的目标文本
单词边界本质上也可以写成环视
\b\w+\b
(?<!\w)\w+(?!\w)
(?<=\W)\w+(?=\W)
环视虽然也有小括号,但是不会被提取到分组
因为分组的都是匹配到的文本内容
环视只是匹配位置,不匹配文本
转义字符
作用
编码无法用字母表表示的特殊数据
表示无法直接用键盘录入的字符
之所以称为转义字符,是因为它后面的字符不是原来的含义了
转义步骤
1.字符串转义
2.正则转义
要在正则中表示单纯的/,需要在字符串中使用////
转义括号
在正则中方括号 [] 和 花括号 {} 只需转义开括号,但圆括号 () 两个都要转义
正则表达式流派(Flavor)
POSIX标准
BRE(Basic Regular Expression 基本正则表达式)
ERE(Extended Regular Expression 扩展正则表达式)
[[:digit:]]
更多的用于Linux中
PCRE标准
主流
是大多数编程语言的正则实现标准
最大的特点是:支撑\d\w\s等
grep默认是POSIX标准
grep -P sed -P 表示使用PCRE标准
《精通正则表达式》(第 3 版)和 《正则指引》(第 2 版)
导入
不是工作中用不到,而是当你不熟悉一个技能的时候,遇到问题时根本不会考虑它
正则 Regular Expression
正则其实就是一种描述文本内容组成规律的表示方式
正则功能
校验数据有效性
提取文本中想要的内容
文本切割、替换
书
《操作系统真相还原》
《自制编程语言-基于c语言》
《正则指引》
元字符 Metacharacter
所谓元字符就是指那些在正则表达式中具有特殊意义的专用字符
分类
特殊单字符
. 任意字符,换行除外
真正的任意字符,应该是:[\d\D] 、[\s\S]、[\w\W]
\d 任意数字 \D 任意非数字
\w 任意字母数字下划线 \W 任意非字母数字下划线
\s 任意空白符 \S 任意非空白符
空白符
\s 任意空白符
\r 回车符
\n 换行符
\f 换页符
\t 制表符
\v 垂直制表符
量词
* 0到多次
+ 1到多次
? 0到1次
{m} m次
{m,} 至少m次
{m,n} m到n次
范围
|或 ab|bc
[...] 多选一
[a-z] a-z中的任一个
[^...] 不是[]中的任一个
断言
量词与贪婪
模式会改变正则中量词的匹配行为
贪婪匹配 Greedy
尽可能进行最长的匹配
会回溯
非贪婪匹配 Lazy
尽可能进行最短的匹配
在量词后面加上?就可以变为Lazy模式
会回溯
独占模式 Possessive
python默认不支持
不回溯
0 条评论
下一页