正则表达式中的一些元字符
正则表达式是一个特殊的字符序列,利用事先定义好的一些特定字符以及它们的组合组成一个“规则”,检查一个字符串是否与这种规则匹配来实现对字符的过滤或匹配。正则表达式是字符串处理的有力工具,但是并不是Python独有的,其他语言也有。
Python中,re模块提供了正则表达式操作所需要的功能。 大多数字母和字符一般都会和自身匹配。如果在字符串前面加了r,表示对字符串不进行转义。有些字符比较特殊,它们和自身并不匹配,而是表明应和一些特殊的东西匹配,或者会影响重复次数。这些特殊的字符我们称之为元字符。
常用的正则表达式元字符有如下几种:
- “.”: 表示除换行符以外的任意字符;
- “[]”:指定字符集;
- “^”:匹配行首,匹配以^后面的字符开头的字符串;
- “$”:匹配行尾,匹配以$之前的字符结束的字符串;
- “\”:反斜杠后面可以加不同的字符以表示不同的特殊意义;
(1)\b匹配单词头或单词尾;
(2)\B与\b相反,匹配非单词头或单词尾;
(3)\d匹配任何十进制数;相当于[0-9];
(4)\D与\d相反,匹配任何非数字字符,相当于[^0-9];
(5)\s匹配任何空白字符,相当于[\t\n\r\f\v];
(6)\S与\s相反,匹配任何非空白字符,相当于[^\t\n\r\f\v];
(7)\w匹配任何字母、数字或下画线字符,相当于[a-zA-Z0-9_];
(8)\W与\w相反,匹配任何非字母、数字和下画线字符,相当于[^a-zA-Z0-9_];
(9)也可以用于取消所有的元字符:\、[。
(10)这些特殊字符都可以包含在[]中。如:[\s,.]将匹配任何空白字符、",“或”."。 - “*”:匹配位于*之前的字符或子模式的0次或多次出现;
- 增加了 “+”:匹配位于+之前的字符或子模式的1次或多次出现;
- “?”:匹配位于?之前的0个或1个字符;
- “{m,n}”:表示至少有m个重复,至多有n个重复。m,n均为十进制数;
- “{n}”:n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o;
- “{n,m}:”m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次;
- “{n,}”:n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o;
- “[xyz]”:字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”;
- “[^xyz]”:负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“p”;
- “[x-y]”:字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符;
- "[^x-y]":负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符;
- “(?:x)”:匹配p但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达;
- “(?=p)“:正向肯定预查,在任何匹配p的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始;
- ”(?!p)“:正向否定预查,在任何不匹配p的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始;
- ”(?<=p)“:反向肯定预查,与正向肯定预查类拟,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”;
- ”(?<!p)“:反向否定预查,与正向否定预查类拟,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”;