正则表达式入门
前言
啊,正则表达式啊,记住就好了吧。
(我可能就是来熟悉一下markdown的)
入门一分钟,更文两小时
一、什么是正则表达式
正则表达式,总的来说就是用一串字符来匹配另一串字符
这位大佬的博客就很好的解释了什么是正则
入门级教程
二、语法
1.普通字符
- [ABC]:匹配[ ]里面的所有字符
- [^ABC]:匹配除了[ ]中字符的所有字符
- [A-Z]:匹配一个区间里的所有字符(区分大小写)
- \w:匹配字母、数字、下划线。等价于 [A-Za-z0-9_]
2.非打印字符
- \f:匹配一个换页符
- \n:匹配一个换行符
- \r:匹配一个回车符
- \s:匹配任何空白字符,包括空格、制表符、换页符等等
- \S:匹配任何非空白字符
- \t:匹配一个制表符
3.特殊字符
- ^:表示锚定行首,此字符后面的任意内容必须出现在行首,才能匹配。
- $:表示锚定行尾,此字符前面的任意内容必须出现在行尾,才能匹配。
- ():获取子表达式
- *:匹配前面子表达式0+次
- +:匹配前面子表达式1+次
- . :匹配除换行符(\n、\r)之外的任何单个字符
- ?:匹配前面子表达式0、1次或指明非贪婪限定符
- \:转义符
- |:两项之间选择 栗子:[a|b]:匹配a或b
4.限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
- {n}:前面子表达式匹配n次
- {n,}:前面子表达式至少匹配n次
- {n,m}:前面子表达式至少n,至多m次
- *和+限定符都是贪婪的
- <.*>:最大匹配
- <.*?>:最小匹配
5.定位符
- ^和$
- \b:匹配单词边界(可以取代< >)
- \B:匹配非单词边界
6.选择
这里有?=、?<=、?!、?<!的使用???
我不清楚,用到再回来学吧
7.反向引用
\1 表示引用整个表达式中第1个分组中的正则匹配到的结果。 举个栗子:比如想查找 *** a *** 前后的字符串要相同,就可以这么写:
------------([0-9]{2}) a \1---------------
注意:\num 这个num看的是最左边( 的位置
8.修饰符
/pattern/flags
修饰符 | 含义 | 描述 |
---|---|---|
i | ignore | 不区分大小写 将匹配设置为不区分大小写 |
g | global | 全局匹配 查找所有的匹配项 |
m | multi line | 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾 |
s | 特殊字符圆点 | . 中包含换行符 \n |
三、应用
四、python正则
1.re.match(pattern, string, flags=0)
- 从字符串的起始位置匹配一个模式
- 匹配成功返回对象:group(num)或 groups() 获取匹配的表达式
- 匹配不成功返回None
2.re.search(pattern, string, flags=0)
- 同上,只不过不限定从开头开始匹配
3. re.findall(pattern, string, flags=0)
- 返回匹配表达式列表
- 注意: match 和 search 是匹配一次 findall 匹配所有
4. re.sub(pattern, repl, string, count=0, flags=0)
- pattern : 正则中的模式字符串。
- repl : 替换的字符串,也可为一个函数。
- string : 要被查找替换的原始字符串。
- count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
- flags : 编译时用的匹配模式,数字形式。
总结
冲啊…………