re.match()正则表达式

import re
#匹配以chinahadoop开头的字符串
result = re.match("chinahadoop","chinahadoop.cn")
#打印匹配出来的内容
print(result.group())
#运行结果:chinahadoop

字符 描述
. 匹配除“\n”之外的任意单个字符
\d 匹配0到9之间的一个数字,等价于[0-9]
\D 匹配一个非数字字符,等价于[^0-9]
\s 匹配任意空白字符,如空格、制表符“\t”、换行“\n”等
\S 匹配任意非空白字符
\w 匹配任意字母或者数字或下划线,如a-z,A-Z,0-9,
\W 匹配任意非单词字符,等价于[^ a-zA-Z0-9
]
[ ] 匹配[ ]中列举的字符
^ 取反

import re
# . 匹配除“\n”之外的任意单个字符
rs = re.match(".","1")
print(rs.group())
rs = re.match(".","a")
print(rs.group())
rs = re.match(".","abc")  #只匹配单个字符
print(rs.group())
rs = re.match("...","abc")  #用3个点匹配3个字符
print(rs.group())

运行结果:
1
a
a
abc

示例:\w匹配单词字符(包括 _ )
rs = re.match("\w","a")
print(rs.group())
rs = re.match("\w","A")
print(rs.group())
rs = re.match("\w","1")
print(rs.group())
rs = re.match("\w","_")
print(rs.group())
rs = re.match("\w","*") #将不会匹配*,返回none
print(type(rs))

运行结果:

a
A
1
_
<class ‘NoneType’>

示例:匹配[ ]中列举的字符,列举的字符之间相当于是或的关系
#匹配以h或者H开头的字符串
rs = re.match("[Hh]", "hello")
print(rs.group()) 
# 匹配0到9任意一个数字方法一
rs = re.match("[0123456789]", "3")
print(rs.group())
# 匹配0到9任意一个数字方法二
rs = re.match("[0-9]", "3")
print(rs.group())

运行结果:
h
3
3

在使用正则表达式的过程中,不可能只针对单个字符匹配,很多时候要对多次出现的字符进行匹配,下面介绍正则表达式的数量表示方法。

字符 描述
* 一个字符可以出现任意次,也可以一次都不出现
+ 一个字符至少出现一次
? 一个字符至多出现一次
{m} 一个字符出现m次
{m,} 一个字符至少出现m次
{m,n} 一个字符出现m到n次
示例:“*”一个字符可以出现任意次,也可以一次都不出现

rs = re.match("1\d*","1234abc")#匹配以1开头,后边是任意多个数字,数字有其他字符,也只匹配数字
print(rs.group())

运行结果:

1234
示例:"+"一个字符至少出现一次

#字符开头至少出现一个数字

rs = re.match("\d+","1abc") #开头只出现1个数字,符合规则
print(rs.group())
rs = re.match("\d+","123abc") #开头出现多个数字,符合规则
print(rs.group())

运行结果:

1
123
示例:“?”一个字符至多出现一次

#匹配开头出现一次的数字字符

rs = re.match("\d?","1abc")
print(rs.group())
#开头数字至多出现一次
rs = re.match("\d?","123abc")  #在1之后的所有数字字符都不会匹配上
print(rs.group())

运行结果:

1
1
示例:{m} 出现m次

rs = re.match("\d{3}","123abc")  #要连续出现3次数字
print(rs.group())
#要连续出现4次数字,字符串中只出现了3次,与规则不匹配
rs = re.match("\d{4}","123abc")  
print(type(rs))

运行结果:

123
<class ‘NoneType’>
示例:{m,} 至少出现m次

rs = re.match("\d{0,}","123abc")  #等价于*,0次或者多次
print(rs.group())
rs = re.match("\d{1,}","123abc")  #等价于+,至少出现一次
print(rs.group())
rs = re.match("\d{0,1}","123abc") #等价于?,至多1次,0次或者1次
print(rs.group())

运行结果:

123
123
1
综合练习:匹配一个手机号

手机号一共11位,第1位是1,第2位是3、5、7、8,第3位到第11位是0-9的数字

代码实现:

rs = re.match("1[3578]\d{9}","13612345678") #匹配成功
print(rs.group())
#用一个错误的手机号测试
rs = re.match("1[3578]\d{9}","14612345678") #匹配失败,第2位没有出现3、5、7、8
print(type(rs))
#11位电话号码+字符测试
rs = re.match("1[3578]\d{9}","13612345678abc")
print(rs.group())
#没有限制边界,也会认为是合法的手机号,后续的“边界表示”课时会介绍如何限定正则表达式的开始和结束边界

运行结果:

13612345678
<class ‘NoneType’>
13612345678

猜你喜欢

转载自blog.csdn.net/lildn/article/details/114528491
今日推荐