例子
例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 |