正则表达式
字符类
字符 | 含义 | 举例 |
---|---|---|
. | 匹配任意一个字符 | abc. -> abcd 或abc6 … |
[] | 匹配[] 中的任意一个字符 | [abc]d -> ad 、bc 、cd |
- | 在[] 内表示字符范围 | [0-9a-fA-F] -> 一位16进制数 |
^ | 位于[] 内的开头,匹配除括号以外的任意一个字符 | [^xy] ->匹配除x y外的任意一个字符 |
[[:xxx:]] | grep工具预定义的一些命名字符类 | [[:alpha::]] -> 匹配一个字母 [[::dight::]] -> 匹配一个数字 |
数量限定符
字符 | 含义 | 举例 |
---|---|---|
? | 紧跟在其前面的单元应匹配零次或一次 | [0-9]?\. -> 匹配0.0、1.7、.6等 |
+ | 紧跟在其前面的单元应匹配一次或多次 | [a-zA-Z0-9_.-]+@[a-zA-Z0-9_.-]\.[a-zA-Z0-9_.-]+ -> 匹配email地址 |
* | 紧跟在其前面的单元应匹配零次或多次 | [0-9][0-9]* -> 匹配至少一位数字 ,等价于[0-9]+ |
{N} | 紧跟在其前面的单元应精确匹配N次 | [1-9][0-9]{2} -> 匹配从100到999的三位整数 |
{N,} | 紧跟在其前面的单元应匹配至少N次 | [1-9][0-9]{2,} -> 匹配大于等于三位数的整数 |
{,M} | 紧跟在其前面的单元应匹配至多M次 | [0-9]{,1} -> 最多匹配0-9之间的一个整数,相当于[0-9]? |
{N,M} | 紧跟在其前面的单元应匹配至少N次,至多M次 | [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1.3}\.[0-9]{1,3} -> 匹配点分十进制IP地址 |
位置限定符
字符 | 含义 | 举例 |
---|---|---|
^ | 匹配行首的位置 | ^Content -> 匹配位于一行开头的Content |
$ | 匹配行末的位置 | ;$ -> 匹配位于一行结束的; ^$ -> 匹配空行 |
\< | 匹配单词开头的位置 | \<th -> 匹配 th... |
\> | 匹配单词结尾的位置 | p\> -> 匹配 ...p |
\b | 匹配单词开头或结尾的位置 | \bat -> 匹配at... 或...at |
\B | 匹配非单词开头或结尾的位置 | \Bat -> 匹配...at... |
特殊符号
字符 | 含义 | 举例 |
---|---|---|
\ | 转义字符,普通字符转义为特殊字符,特殊字转义为普通字符 | 普通字符< 写成\< 表示开头位置 |
() | 将正则表达式的一部分括起来组成一个单元,可以对整个单元使用数量限定符 | ([0-9]{1,3}\.){3}[0-9]{1,3} -> 匹配正则表达式 |
` | ` | 连接两个子表达式,表达或的关系 |
其他普通字符集及其替换
符号 | 替换正则 | 匹配 |
---|---|---|
\d | [0-9] | 数字字符 |
\D | [^0-9] | 非数字组合 |
\w | [a-zA-Z0-9_] | 数字字母下划线 |
\W | [^\w] | 非数字字母下划线 |
\s | [\r\t\n\f] | 表格,换行等空白区域 |
\S | [^\s] | 非空白区域 |
贪婪模式与非贪婪模式
- 贪婪模式:正则表达式匹配时,会尽量多的匹配符合条件的内容
- 非贪婪模式:正则表达式匹配时,会尽量少的匹配符合条件的内容,也就是说,一旦发现匹配符合要求,立马就匹配成功,而不会继续匹配下去(除非有g,开启下一组匹配)
零宽断言
-
所谓断言,是用来声明一个应该为真的事实。在正则表达式中,只有当断言为真时才会继续进行匹配。
-
零宽断言:像用于查找某些内容之前或者之后的东西,其中一些特殊字符如“\b、^、$”等用于指定一个位置,这个位置应满足一定的条件。
-
分类
-
零宽度正预测先行断言
(?=exp)
它断言自身出现的位置之后能匹配的表达式exp。如:
\b\w+(?=ing\b)
,表示匹配以ing
结尾的单词的前面的部分(除ing
以外的部分)。当我们要查找I'm singing while you're dancing.
时,它会匹配sing
和danc
-
零宽度正回顾后发断言
(?>=exp)
它断言自身出现的位置的前面能匹配的表达式exp。如:
(?<=\bre)\w+\b
会匹配以re
开头的单词的后半部分(除er
以外的部分),例如:在查找reading a book
时,它匹配ading
-
Python关于正则表达式的使用
re库主要功能函数
函数 | 说明 |
---|---|
re.search() | 从字符串中搜索匹配正则表达式的第一个位置,返回match对象 |
re.match() | 从一个字符串的开始位置起匹配正则表达式,返回match对象 |
re.find_all() | 搜索字符串,以列表形式返回全部能匹配的子串 |
re.split() | 将一个字符串按照正则表达式匹配结果进行分割,返回列表类型 |
re.finditer() | 搜索字符串,返回一个匹配结果的迭代类型,每一个迭代类型是一个match对象 |
re.sub() | 在一个字符串中替换所有匹配正则表达式的子串,返回替换后的字符串 |
控制匹配模式
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位OR(|)来指定。如:re.l
、re.M
被设置为l或M标志
修饰符 | 描述 |
---|---|
re.l | 使匹配对大小写不敏感 |
re.L | 做本地化识别匹配(local-aware)匹配 |
re.M | 多行匹配,影响^ 和$ |
re.S | 使. 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响:\w 、\W 、\b 、\B |
re.X | 该标志通过给你更灵活的格式以便你将正则表达式写的更易于理解 |