目录
[1、普通字符[ ]](#1、普通字符[ ])
[4、运算字符( )](#4、运算字符( ))
摘要:
常用匹配:[A-C]、[^A-C]、\w、\d、\n、\r、\t、*、+、?、{n,m}。
python的re.findall函数
一、语法
/pattern/flags
pattern:表示匹配模式,需要匹配的具体内容。
**flags:**表示修饰符。
二、匹配模式pattern
1、普通字符[ ]
匹配多个字符条件要用[],单个字符无需使用中括号括起来。例:/A/g和/[AB]/g。二者的区别在于前者只匹配单个字符A,而后者匹配单个字符A或B。
符合 | 解释 |
---|---|
[ABC] | 匹配单个字符 |
[A-C] | 匹配A-C单个字符 |
[^ABC] | 匹配除了ABC外的单个字符 |
\S | 匹配非空字符,不包括回车换行 |
\s | 匹配空字符,包括回车换行 |
\w | 匹配字母、、数字、下划线等同于 [A-Za-z0-9_] |
\d | 匹配单个数字等同于[0-9] |
\t | 匹配一个制表符 |
\v | 匹配一个垂直制表符 |
2、限定字符
普通字符只能匹配单个,限定字符可以匹配多个连起来的,主要用于匹配字符串。
符号 | 解释 |
---|---|
. | 匹配除了换行符外的单个字符等同于[^\n\r] |
* | 匹配子表达式子零次或多次,例:O* |
+ | 匹配子表达式一次或多次,例:O+ |
? | 匹配子表达式零次或一次,例:O? |
\ | 转义字符,用于匹配特殊字符。 |
| | 表示或 |
{n} | 匹配固定n个字符,例:O{2}匹配food。 |
{n,} | 至少匹配n次。 |
{n,m} | 至少匹配n次,至多匹配m次。 |
3、定位字符
^匹配字符段落的开头,$匹配段落的结尾。
符号 | 解释 |
---|---|
^ | 匹配字符串开头 |
$ | 匹配字符串结尾 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
案例:匹配字符串开头
字符段开头会有一个非可见的字符,匹配的是这个,^he则是匹配he开头的字符段(这种状态要加上多行模式。

4、运算字符( )
了解即可,以下做个简单的介绍.。
字符 | 解释 |
---|---|
(?=pattern) | 匹配 pattern 但不获取匹配结果(不包括匹配模式字符)。 |
(?:pattern) | 匹配 pattern 但获取匹配结果(包括匹配模式字符) |
(?!pattern) | 匹配不在pattern内的字符(不包括匹配模式字符)。 |
(?<=pattern) | 与(?=pattern)类似,只不过(?=pattern)只能放在查询字符串末尾,(?<=pattern)只能放在查询字符串开头。 |
(?<!pattern) | 与(?!pattern)类似,只不过(?!pattern)只能放在查询字符串末尾,(?<!pattern)只能放在查询字符串开头。 |
测试:?: 和 ?=
前者进行了结果获取。

后者只是匹配,并没有获取结果。

三、修饰符flags
常用的修饰符为//i和//g,可以混合搭配使用。

案例:全局忽略大小写匹配ABC字符串
bash
/ABC/gi
四、各语言的正则使用
1、Python的re
要引入re库:import re
python
import re
Python的re库,无需按照正则表达式的语法,也就是两个双斜杠,修饰符模块由于python自定,这里举例常用的两个函数一个是全局搜索re.findall和全局替换re.sub。
python正则修饰符模块
**re模块中flags的常用属性:
标志位,用于控制正则表达式的匹配方式。
- re.I:忽略大小写
- re.L:表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
- re.M:多行模式
- re.S:即为 . ,并且包括换行符在内的任意字符(.不包括换行符)
- re.U:表示特殊字符集 \w, \W, \b, \B, \s, \S, \d, \D 依赖于 Unicode 字符属性数据库
- re.X:为了增加可读性,忽略空格和 # 后面的注释**
案例:re.findall全局搜索返回list
**findall:查找整个字符串,返回一个list
- 语法:re.findall(pattern, string, flags=0)
- 解释:pattern:表示模式字符串,由要匹配的正则表达式转换而来。
string:表示要匹配的字符串。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写**
python
import re
str="Sunlan love apple lSunlan"
c=re.findall("[A-Z]",str,re.I)
print(c)
案例:re.sub全局替换返回
**sub:查找字符串中所有匹配的数据进行替换
- 语法:re.sub(pattern, repl, string[,count=0][,flags=0])
- 解释:pattern:表示模式字符串,由要匹配的正则表达式转换而来。
repl:表示替换的字符串。
string:表示要匹配的字符串。
count:可选参数,表示模式匹配后替换的最大次数,默认值为0,表示替换所有的匹配值。
flags:可选参数,表示标志位,用于控制匹配方式,如是否区分字母大小写。**
python
import re
str="Sunlan love apple lSunlan"
str=re.sub(" lSunlan","s",str)
print(str)