Python的re模块,正则表达式
#导入re模块
import re
1、match方法的使用:
result = re.match(正则表达式,待匹配的字符串)
正则表达式写法:
第一部分:
字符
功能
.(点,英文的句号)
匹配任意一个字符,除了\n
[]
匹配[]中列举的字符
\d
匹配数字,即0-9
\D
匹配非数字
\s
匹配空白,即空格,tag键
\S
匹配非空白
\w
匹配单词字符,即数字,小写字母,大写字母,下划线_
\W
匹配非单词字符
举例:
>>> re.match(".","&and") #.匹配任意字符,除了\n,只要第一个匹配,后面的and都是无所谓了,match方法就是这样定义的。从字符串最左边开始匹配,只要都匹配正则表达式,字符串后面的多余部分可以随意
<_sre.SRE_Match object; span=(0, 1), match='&'> #匹配到就有返回值,match是匹配到的具体内容,即 给一个.匹配了最左边的第一个字符&。
>>> re.match(".","\n") #不匹配,就返回None
>>> re.match("[1234][a-z][A-Z]\d","1aZ9") #正则表达式的意思是第一个字符要满足在1-4范围内,第二个字符是小写字母a-z,第三个字符是大写字符A-Z,第四个字符是数字,后面的字符串刚好满足,所以返回了下面这串值。这里同样的1aZ9匹配,1aZ9#@@¥%¥也是匹配的。
<_sre.SRE_Match object; span=(0, 4), match='1aZ9'>
>> re.match("\w\W","a%224") #第一个匹配单词字符,第二个匹配非单词字符,后面的无所谓
<_sre.SRE_Match object; span=(0, 2), match='a%'>
>>> re.match("\w\W","ab")
第二部分,个数相关:
字符
功能含义
*
匹配一个字符出现0次或者多次,即可有可无
+
匹配一个字符出现1次或者多次,至少出现一次
?
一个字符出现1次或者0次,即要么出现1次要么不出现
{m}
匹配个数,前面的字符出现了m次
{m,}
匹配个数,前面的字符至少出现了m次
{m,n}
匹配个数,前面的字符出现了m到n次
举例:
>>> re.match("\d*","1234aa") #\d出现了0次或者多次
<_sre.SRE_Match object; span=(0, 4), match='1234'> #匹配到的是1234
>>> re.match("\d*","abd")
<_sre.SRE_Match object; span=(0, 0), match=''> #匹配到空字符
>>> re.match("\d+","abd") #匹配不到,因为+意思是必须至少出现1次
>>> re.match("\d{11}","18510666666") #数字匹配11个
<_sre.SRE_Match object; span=(0, 11), match='18510666666'>
# 匹配手机号,分析:手机号第一个数字必须为1,第二个数字应该是3、4、5、8、9,第3个到第11个是任意数字,所以为:\d{9},表示9个数字,然后只能有11个数字,所以9个数字的后面加$表示匹配结束,只能匹配前面的11个数字
res = re.match(r"1[34589]\d{9}$", "13511111111")
>>> re.match("1[34589]\d{9}","12000000000") #第2个数字不满足,不匹配
>>> re.match("1[34589]\d{9}","13000000000r") #满足,匹配
<_sre.SRE_Match object; span=(0, 11), match='13000000000'>
第三部分,边界相关:
字符
功能含义
^
表示匹配一个字符的开头
$
表示匹配一个字符的结尾
\b
匹配一个字符的边界
\B
匹配非字符边界
还是上面的例子,匹配手机号:
>>> re.match("1[34589]\d{9}","13000000000r") #满足,匹配
上面这个正则表达式是匹配的,但是显然不对,手机号后面不应该有字母,怎么解决呢?在写完的正则表达式后加$即可
>>> re.match("1[34589]\d{9}$","13000000000r") #不满足,不匹配
如果要匹配一个:D:\\python\\test,怎么办?