例子
例1:
1 | ^[0-9]+abc$ |
^为匹配字符串开始位置[0-9]+为匹配多个数字,[0-9]匹配单个数字,+匹配一个或者多个abc$匹配字母abc并以abc结尾,$为匹配输入字符串的结束位置。
例2:
1 | ^[a-z0-9_-]{3,15}$ |
^为匹配字符串开始位置[a-z0-9_-]为匹配字母、数字和下划线、横杆,{3,15}匹配三到十五个字符
语法
普通字符
非打印字符
反斜杠转义:\n换行符,\f换页符,\s匹配任何空白字符(包括空格、制表符、换页符等等。等价于[\f\n\r\t\v])。注:\cx-匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。
特殊字符
( ):标记一个子表达式的开始和结束位置[ ]:标记一个中括号表达式{ }:标记一个限定符表达式(次数)
注:符合圆括号括住部分会被缓存下来。
|:或关系.:匹配除换行符\n之外的任何单字符
限定符
*:匹配前面的子表达式零次或多次+:匹配前面的子表达式一次或多次?:匹配前面的子表达式零次或一次{n}:匹配确定的 n 次{n,}:至少匹配 n 次{n,m}:最少匹配 n 次且最多匹配 m 次(逗号前后不能空格)
注:*、+限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个?就可以实现非贪婪或最小匹配。
定位符
$:匹配结尾位置^:匹配开始位置 | 方括号表达式中使用,则表示不接受该字符集合\b:匹配一个单词边界,即字与空格间的位置\B:非单词边界匹配
\b字符的位置决定是匹配单词头还是单词尾。
注:不能将限定符与定位符一起使用。由于在紧靠换行或者单词边界的前面或后面不能有一个以上位置,因此不允许诸如 ^* 之类的表达式。
选择
(pattern):匹配 pattern 并获取这一匹配(?:pattern):匹配 pattern 但不获取匹配结果(?=pattern):正向肯定预查(look ahead positive assert)(?!pattern):正向否定预查(negative assert)(?<=pattern):反向(look behind)肯定预查(?<!pattern):反向否定预查
元字符
x|y:匹配 x 或 y[xyz]:字符集合[^xyz]:负值字符集合[a-z]:字符范围[^a-a]:负值字符范围\b:匹配一个单词边界\B:匹配非单词边界\cx:匹配由 x 指明的控制字符\d:匹配一个数字字符\D:匹配一个非数字字符\f``\n``\r:换页符\换行符\回车符\s:匹配任何空白字符,等价于[\f\n\r\t\v]\S:匹配任何非空白字符\t``\v:制表符\垂直制表符\w:匹配字母、数字、下划线。等价于’[A-Za-z0-9_]’。\W:匹配非字母、数字、下划线\xn:匹配 n,其中 n 为十六进制转义值 —\x41->A\num:匹配 num,其中 num 是一个正整数\n\nm\nml:标识一个八进制转义值或一个向后引用\un:匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。
替换
使用\1、\2替换搜索到的字符串
例子:
要替换
1 | * [the label](#the_anchor) |
为
1 | <h2 id="the_anchor">the label</h2> |
使用
1 | import fileinput |