正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,用来检索、替换那些符合规则的文本,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
可打印字符:
\d : 匹配一个数字,等价于[0-9] ;
\D : 匹配非数字,等价于[^0-9];
\w : 匹配一个数字、字母或下划线,等价于[A-Za-z_0-9] ;
\W : 匹配非数字、字母或下划线,等价于[^A-Za-z_0-9];
\s: 匹配空格字符,等价于 [ \f\n\r\t\v];
\S : 匹配非空格,等价于 [^ \f\n\r\t\v];
非打印字符:
\cx : 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符;
\f :匹配一个换页符。等价于 \x0c 和 \cL;
\n:匹配一个换行符。等价于 \x0a 和 \cJ;
\r :匹配一个回车符。等价于 \x0d 和 \cM;
\t :匹配一个制表符。等价于 \x09 和 \cI;
\v:匹配一个垂直制表符。等价于 \x0b 和 \cK;
\s : 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。注意 Unicode 正则表达式会匹配全角空格符;
特殊字符在正则中代表了特殊的含义,要匹配字符本身,需在字符前使用“\”进行转义。
^ :限定输入字符串的开始位置(如在方括号表达式中使用,表示不接受该字符集合),要匹配 ^ 字符本身,使用 \^;
$ :限定输入字符串的结尾位置,要匹配 $ 字符本身,使用 \$;
( ):标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用。要匹配(),使用 \( 和 \);
* :匹配前面的子表达式零次或多次,要匹配 * 字符,使用 \*;
+ :匹配前面的子表达式一次或多次,要匹配 + 字符,使用 \+;
. :匹配除换行符 \n 之外的任何单字符,要匹配 . ,使用 \.,若需匹配换行符,添加参数re.S ;
[ :标记一个中括号表达式的开始,要匹配 [,使用 \[;
? :匹配前面的子表达式零次或一次,或指明一个非贪婪限定符,要匹配 ? 字符,使用 \?;
\ : 将下一个字符标记为 或特殊字符、或原义字符、或向后引用、或八进制转义符,匹配\,使用\\;
{ :标记限定符表达式的开始,要匹配 {,使用 \{。
| :指明两项之间的一个选择(逻辑“或”运算),要匹配 |,使用 \|。
限定符:
* :匹配前面的子表达式零次或多次,* 等价于{0,},贪婪模式(最大匹配);
+ :匹配前面的子表达式一次或多次,+ 等价于 {1,},贪婪模式;
? :匹配前面的子表达式零次或一次,? 等价于 {0,1},放在“*”或者“+”后面,表示非贪婪模式(最小匹配);
{n}:n 是一个非负整数。匹配确定的 n 次;
{n,} :n 是一个非负整数。至少匹配n 次,'o{1,}' 等价于 'o+','o{0,}' 则等价于 'o*';
{n,m} :m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次,注意在逗号和两个数之间不能有空格;
定位符:
^:匹配输入字符串开始的位置,如果设置了 RegExp 对象的 Multiline 属性,^ 还会与 \n 或 \r 之后的位置匹配;
$ :匹配输入字符串结尾的位置,如果设置了 RegExp 对象的 Multiline 属性,$ 还会与 \n 或 \r 之前的位置匹配;
\b:匹配一个字边界,即字与空格间的位置,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”;\b 字符的位置是非常重要的,如果它位于要匹配的字符串的开始,它在单词的开始处查找匹配项,如果它位于字符串的结尾,它在单词的结尾处查找匹配项;
\B:非字边界匹配,“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”;
[] : 所有字符都是原字符(无特殊含义)字符集
[^] : 非 [] , 取反,匹配所有不不包含在中括号中的字符,^需要放在[]中首位
() : 分组,将“( )” 之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用;
优先级
正则表达式从左到右进行计算,并遵循优先级顺序,这与算术表达式非常类似。
相同优先级的从左到右进行运算,不同优先级的运算先高后低。下表从最高到最低说明了各种正则表达式运算符的优先级顺序:
\ |
转义符 |
(), (?:), (?=), [] | 圆括号和方括号 |
*, +, ?, {n}, {n,}, {n,m} |
限定符 |
^, $, \任何元字符、任何字符 |
定位点和序列(即:位置和顺序) |
| |
替换,"或"操作字符具有高于替换运算符的优先级 |