Python 正则表达式
看http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html后作的一个记录。
一、正则表达式的符号:
(1)字符:
. 表示任意字符
\ 转义字符
[] 表示从[]中取值
(2)预定义字符集:
\d 数字[0-9]
\D 非数字
\s 空白字符 [<space>, \n\t\r\f\v]
\S 非空白字符
\w 字符 [A-Za-z0-9]
\W 非字符
(3)数量词:
* 重复前面一个字符0-n次
+ 重复前面一个字符1-n次
? 重复前面一个字符0-1次
{m} 重复前面一个字符m次
{m, n} 重复前面一个字符m-n次,m,n可以省略一个,省略m表示0,省略n表示无限次
(4)边界匹配:
^ 匹配字符串的开头,在多行模式中也可匹配每一行的开头
$ 匹配字符串的结尾,在多行模式中也可匹配每一行的结尾
\A 仅匹配字符串的开头
\Z 仅匹配字符串的结尾
\b 匹配\w与\W之间,即匹配字符的开头(不能说是开头,但是却是匹配出的字符串的开头),非字符的结尾,组合而成的字符串。如
eg: a\b , 在“asfq!z”中匹配,则得到的结果是"asfq"
\B \b的取反
(5)逻辑与分组:
| 取示取其中的一个 如(123|456)
(...) 即可以将前面当成一个整体,相当于一个括号的作用, 与 “|” 合用, 分组(即可以将括号中的这一部分数据作为一个分组,输出)
(?P<Name>... ) 将“...”分组,并且命名为Name, eg: (?P<id>abc)xx,表示将匹配到的abc这一部分进行分组,并且命名为id
\<Number> 表示将分组后,索引号为Number的字符 eg: \1 表示引用编号为1所匹配到的字符串
(6)不分组
(?:...), 表示不将“...”的内容分组,而是当是一个整体或者用作“|”的一部分
(?#...),表示"..."的内容将被忽略
(?=...),表示之后的内容为“...” , eg a(?=\d), 表示a的后面必须是数字,如 a1
(?!...) , 表示之后的一个字符不是“...”
(?<=...),表示之前的一个字符是“...”
(?<!...),表示之前的字符不匹配“...”, eg (?<!\d)a, 表示a前面不是数字才以匹配
(?(id/name) yes_pattern | no_pattern),如果编号为id或者name的组匹配到字符,则需要匹配yes_pattern,否则则匹配no_pattern
r 放在字符串前,表示不转义