python之正则(一)
1.常用正则表达式:
\d:数字[0-9] ,实例:a\dc -> a1c
\D:非数字[^\d],实例:a\Dc -> abc
\s:空白字符[<空格>\t\r\n\f\v] 实例:a\sc ->a c
\S:非空白字符[^\s] 实例:a\Sc ->abc
\w:单词字符[A-Za-z0-9_] 实例:a\wc ->abc
\W:非单词字符[^\W]
*:匹配前一个字符0或无限次; abc* -> ab或abc或abcc
+:匹配前一个字符1次或无限次 abc+ -> abc或abcc
?:匹配前一个字符0次或1次 abc? -> ab或者abc
{m}:匹配前一个字符m次 ab[2]c -> abbc
^:匹配字符串开头,在多行模式中匹配每一行的开头;
$:匹配字符串结尾,在多行模式中匹配每一行的结尾;
\A:仅匹配字符串开头
\Z:仅匹配字符串结尾
\b:匹配\w和\W之间;
\B:{^\b}
以什么结尾:一般这样写(abc)$
|:它总是先尝试匹配左边的表达式,一旦成功则跳过匹配右边的表达式;
(...):被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的
左括号'(',编号+1
另外,分组表达式作为一个整体,可以后接数量词,表达式中的|仅在
该组中有效;
例如:(abc){2} -> abcabc
a(123|456)c -> a456c
(?P<name>...):分组,除了原有的编号外再指定一个额外的别名;
(?P<id>abc){2} -> abcabc
\<number> :引用编号为<number>的分组匹配到的字符串.
(\d)abc\1 -> 1abc1或者5abc5
(?P=name):引用别名为<name>的分组匹配到的字符串.
(?P<id>\d)abc(?P=id) -> 1abc1或者5abc5
分组:(?P<name>...)省略的部分就是正常的正则匹配,我们把
匹配到的这个整体给赋一个变量名字name,在后续调用的时候,
分组表达式的写法:(abc)edcrfv.*(wsx).*\1
2.编译正则表达式
r表示raw的简及raw string 意思是原生字符,也就是说这个字符串中间的特殊字符不用转义;
比如你要表示'\n',可以这样:r'\n'
但是,如果你不用原生字符,而是用字符串你得这样:'\\n'
shell 中:grep -E或egrep
re.compile(pattern[,flags])
这个方法就是将字符串的正则表达式编译成正则对象,第二个参数flag是匹配
模式,取值可以使用按位或者运算符"|"表示同时生效,比如re.l | re.M,
flag的可选值有:
re.l(re.lGNORECASE):忽略大小写(括号内是完整写法,下同)
M(MULTILINE):多行模式,改变'^'和'$'的行为;
S(DOTALL):点任意匹配模式,改变'.'的行为;
L(LOCALE):使预定义字符类\w \W \b \B \s \S取决于当前区域设定;
U(UNICODE):使预定义字符类\w \W \b \B \s \S \d \D 取决于unicode定义的字符属性.
X(VERBOSE):详细模式。这个模式下正则表达式可以是多行,忽略空白符,并
可以加入注释。以下两个正则表达式是等价的:
a = re.compile(r"""\d+ #the integralpart
\. #the decimal point
\d * # some fractional digits""",re.X)
b = re.compile(r"\d+\.\d")
1.正则匹配是,优先编译成正则对象,然后再进行匹配,
3.re正则对象和正则匹配效率比较
re模块是python中处理正则表达式的一个模块,通过re模块的方法,把正则表达式pattern
编译成正则对象,以便使用正则对象的方法.那为什么要使用re模块来把正则表达式
搞成正则对象呢,最主要的是可以提高代码的执行效率,正则对象比正则匹配快好多;