Python的re模块是专门用来处理正则的
import re
字符匹配分普通字符和元字符,普通字符就是直接匹配,元字符是模糊匹配,今天学了几个元字符,mark一下
1、^
用于指定只和行首匹配
s=r'^t'
re.findall(s, 'tan, tbn, ttt')
返回tan中的t,注意^符号放于首位
如果要匹配^自身的字符,则使用转义符'\',这里和c语言的\n\r\t等类似
s=r'\^ta'
re.findall(s, 'tan, ^tan, ttt')
返回^ta,这里没限定是否在行首匹配,在任何位置都可以
2、$
用于指定只和行尾匹配
s=r't$'
re.findall(s, 'tan, tbn, ant')
返回ant中的t,注意$符号放于末尾
如果要匹配$自身的字符,则使用转义符'\'
s=r't\$'
re.findall(s, 'tan, t$bn, ant')
返回t&,同样没有限定在行尾匹配,任何位置都可以
3、[ ]
用于指定一个字符
s = r't[abc]n'
re.findall(s,'tan,tbn,tcn,tdn')
返回 tan tbn tcn,表示abc三字母中的任意一个匹配,同理[a-z]表示任意一个字母,[0-9]表示任意一个数字,[0123456789]这也可以!
在[]中的元字符都是不起作用的
s = r't[abc$]'
re.findall(s,'ta,tb,t$,tt')
返回ta tb t$,不返回t,因为这里$不起行尾的作用,只是简单的一个‘$’字符
但^在[]中有取反的作用
s = r't[^abc]n'
re.findall(s,'tan,tbn,tcn,tdn')
返回tdn,意味着不取abc中的字母。那么如何像‘$’那样在[]表示字符呢
s = r'[abc^]t'
re.findall(s,'^t,at,bt,dt,^t')
这样既可,返回^t,at,bt,^t。
============================
继续之前的转义字符
\d 表示所有的十进制数
\D表示所有的非十进制数
\w表示所有的字母大小写和数字
\W表示所有的非字母大小写和数字
\s表示所有的空白[\t\n]
\S表示所有的非空白
============重复===============
s = r'^010-[0-9]{8}'
re.findall(s,'010-81892274')
{n}表示前面的字符重复n次
{m,n}表示前面的字符重复m-n次
*匹配零次或多次
s = r'^010-[0-9]*'
re.findall(s,'010-81892274')
返回010-81892274
?匹配零次或一次
s = r'^010-[0-9]?'
re.findall(s,'010-81892274')
返回010-8
+至少匹配一次(贪婪)
s = r'^010-[0-9]+'
re.findall(s,'010-81892274')
返回010-81892274
+?至少匹配一次(非贪婪)
s = r'^010-[0-9]+?'
re.findall(s,'010-81892274')
返回010-8