python之正则(一)

1.常用正则表达式:

d:数字[0-9] ,实例:adc -> a1c
D:非数字[^d],实例:aDc -> abc
s:空白字符[<空格> fv] 实例:asc ->a c
S:非空白字符[^s] 实例:aSc ->abc
w:单词字符[A-Za-z0-9_] 实例:awc ->abc
W:非单词字符[^W]

*:匹配前一个字符0或无限次; abc* -> ab或abc或abcc
+:匹配前一个字符1次或无限次 abc+ -> abc或abcc
?:匹配前一个字符0次或1次 abc? -> ab或者abc

{m}:匹配前一个字符m次 ab[2]c -> abbc


^:匹配字符串开头,在多行模式中匹配每一行的开头;
$:匹配字符串结尾,在多行模式中匹配每一行的结尾;
A:仅匹配字符串开头
:仅匹配字符串结尾
:匹配w和W之间;
B:{^}


以什么结尾:一般这样写(abc)$


|:它总是先尝试匹配左边的表达式,一旦成功则跳过匹配右边的表达式;

(...):被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的
左括号'(',编号+1
另外,分组表达式作为一个整体,可以后接数量词,表达式中的|仅在
该组中有效;

例如:(abc){2} -> abcabc
a(123|456)c -> a456c

(?P<name>...):分组,除了原有的编号外再指定一个额外的别名;
(?P<id>abc){2} -> abcabc
<number> :引用编号为<number>的分组匹配到的字符串.
(d)abc1 -> 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 意思是原生字符,也就是说这个字符串中间的特殊字符不用转义;

比如你要表示' ',可以这样:r' '

但是,如果你不用原生字符,而是用字符串你得这样:'\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 s S取决于当前区域设定;
U(UNICODE):使预定义字符类w W  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模块来把正则表达式
搞成正则对象呢,最主要的是可以提高代码的执行效率,正则对象比正则匹配快好多;

原文地址:https://www.cnblogs.com/awenxianliao/p/7837178.html