字符匹配:

普通字符:

大多数字母和字符一般都会和自身匹配

如正则表达式test会和字符串“test”完全匹配

元字符:

.^ $ * + ? { } [ ] \ | ( )

[]字符集:

-常用来指定一个字符集:[abc]; [a-z]

-元字符在字符集中不起作用:[akm$]

-补集匹配不在区间范围内的字符: [^5]

s = abc

re.findall(s,”abcaaaaaaaaabcaaaaa”)

^-匹配行首。除非设置MULTILINE标志,它只是匹配字符串的开始。在MULTILINE模式里,它也可以直接匹配字符串中的每个换行。

$-匹配结尾。行尾被定义为要么是字符串尾,要么是一个换行字符后面的任何位置。

正则表达式-元字符

\

-反斜杠后面可以加不同的字符以表示不同特殊意义。

-也可以用于取消所有的元字符:\[ \\

\d匹配任何十进制数:它相当于类[0-9].

\D匹配任何非数字字符:它相当于类[^0-9].

\s匹配任何空白字符:它相当于类[\t\n\f\v].

\S匹配任何非空白字符:它相当于类[^\t\n\r\f\v].

\w匹配任何字母数字字符:它相当于类[a-zA-Z0-9].

\W匹配任何非字母数字字符:它相当于类[^a-zA-Z0-9]

\b匹配词边界。


重复:

-正则表达式第一功能是能够匹配不定长的字符集,另一个功能就是你可以指定正则表达式的一部分的重复次数。

*

-指定一个字符可以被匹配零次或更多次,而不是只有一次。匹配引擎会试着重复尽可能多的次数(不超过整数界定范围,20亿)

-a[abc]*b

匹配北京电话010-12345678

r=r”^010-\d\d\d\d\d\d\d\d”r=r”^010-\d{8}”{8}代表数字重复8次。

+

-表是匹配一次或更多次。

-注意*+之间不同;*匹配零或者更多次,所以可以根本就不出现,而+则要求至少出现一次。

-匹配一次或零次;你可以认为它用于标识某事物是可选的。

r=r”^010-?\d{8}$”

r = r”ab+”贪婪匹配r=r”ab+?”非贪婪匹配

{m,n}

-其中mn是十进制整数。该限定符的意思是至少有m个重复,至多到n个重复。a/{1,3}b

-忽略m会认为下边界为0,而忽略n的结果将是上边界为无穷大(实际上是20亿)

-{0,}等同于*,{1}等同于+,而{0,1}则与?相同。如果可以的话,最好使用*,+,或?

如何在python使用正则表达式:

importre引入re模块。

最好是编程对象使用。

p_tel=re.compile(r1)

p_tel

输出会产生错误

p_tel.finall()这种形式就是编译。

csvt_re= re.complile (r’csvt’,re.I) 不区分大小写的匹配。

在字符串前面加入r就不会被任何特殊方式处理,应当加r

执行匹配

RegexObject实例有一些方法和属性,完整的列表

sub()subn()split()findall()等做练习。

分组

“(”和”)”

email = r”\w{3}@\w(\.com|\.cn)”分组的应用