下面我将详细讲解Python正则表达式的概述及常用字符,以及两个具体的示例说明。
Python正则表达式概述
正则表达式(Regular Expression)是一种高效的文本处理工具,常用于文本匹配、提取、替换等操作。Python通过内置的re模块支持正则表达式操作。在正则表达式中,由特定字符和符号组成的匹配规则,被称为正则表达式的模式。
常用字符
普通字符
普通的字符(a、b、c等)表示匹配该字符本身。
特殊字符
下面是一些Shell中常涉及到的一些特殊字符:
- . 匹配任意单个字符,换行符除外。
- \d 匹配任意一个数字
- \D 匹配任意一个非数字
- \w 匹配任意一个单词字符,包括字母、数字、下划线等。
- \W 匹配任意一个非单词字符。
- \s 匹配任意一个空白字符,包括空格、制表符、换行符等。
- \S 匹配任意一个非空白字符。
- \t 匹配一个制表符。
- \n 匹配一个换行符。
- \r 匹配一个回车符。
- ^ 匹配行首。
- $ 匹配行尾。
- [] 匹配中括号中出现的任意一个字符,比如[abc]匹配a、b、c中的任意一个字符。
- [^] 匹配中括号中没有出现的任意一个字符,比如[^abc]匹配非a、b、c中的任意一个字符。
- [^]也可以表示取反,比如[^0-9]表示匹配所有不是数字的字符
- * 匹配前面的字符出现0次或多次。比如ab*匹配一个或多个b的字符串,abbbbbb、ab皆匹配。
- + 匹配前面的字符出现1次或多次。比如ab+匹配一个或多个b的字符串,a不匹配,ab、abbbbbb匹配。
- ? 匹配前面的字符出现0次或1次。比如ab?匹配0个或1个b,即a或ab。
- {} 匹配前面字符出现的次数。比如a{3}匹配3个a,a{3,5}匹配3个到5个a。
- | 匹配左侧或右侧的字符。比如a|b匹配a或b。
元字符
元字符是指一些特殊的字符,需要在前面加上“\”才能表示其本身含义。一些常见的元字符包括:
- . 匹配任意单个字符。
- [ ] 匹配中括号中出现的任意一个字符,比如[a-z]匹配任意一个小写字母。
- [^] 匹配中括号中没有出现的任意一个字符,比如[^abc]匹配非a、b、c中的任意一个字符。
- + 匹配前面的字符出现1次或多次。
- * 匹配前面的字符出现0次或多次。
- ? 匹配前面的字符出现0次或1次。
- {n,m} 匹配前面字符出现的次数,n表示最少出现的次数,m表示最多出现的次数。
- ** 表示转义字符,让字符本身失去它原来的意义,变成一个普通字符。比如\b表示一个退格符,\t表示一个制表符,\n表示一个换行符。
示例说明
示例1:验证手机号格式是否正确
我们使用正则表达式来验证一个手机号的格式是否符合要求。手机号的格式为:以数字1开头,紧接着第二位为3、4、5、7或8,再后面的9位数字可以为0-9中的任意一个数字。
验证代码如下:
import re
def checkPhone(phone):
if len(phone)!=11:
print('手机号长度不对')
return False
matchObj = re.match(r'^1[34578]\d{9}$',phone)
if matchObj == None:
print('手机号格式不正确')
return False
else:
return True
#测试:
print(checkPhone('13888888888')) #True
print(checkPhone('13288888888')) #True
print(checkPhone('1388888888')) #False,长度不对
print(checkPhone('1388888888a')) #False,格式不对
上述代码中,我们先判断手机号的长度是否正确,然后使用正则表达式r'^1[34578]\d{9}$'
来判断手机号的格式是否正确。其中^表示开头,$表示结尾,后面的“1[34578]\d{9}”表示必须以数字1开头,紧接着的第二位只能为3、4、5、7或8,后面的9位可以是任意一个数字。如果匹配到了符合条件的模式,则返回True,否则返回False。
示例2:从HTML中提取链接
我们使用正则表达式来从HTML页面中提取所有的链接。HTML页面中的链接一般都是以标签包含,而标签中的href属性就是链接地址。
提取代码如下:
import re
def extractLinks(htmlStr):
linkPattern = re.compile(r'<a.+?href="(.+?)"')
links = linkPattern.findall(htmlStr)
return links
#测试:
htmlStr = '<html><body><a href="http://www.baidu.com">百度一下,你就知道</a><a href="http://www.sohu.com">搜狐首页</a></body></html>'
print(extractLinks(htmlStr)) #['http://www.baidu.com', 'http://www.sohu.com']Y
上述代码中,我们定义了一个名为linkPattern的正则表达式对象,使用了正则表达式r'<a.+?href="(.+?)"'
来提取链接地址。其中<a.+?>
表示匹配标签,.+?
表示匹配任意一个字符+重复0次或多次,使用问号表示非贪婪模式,href="(.+?)"
表示匹配href属性的值。最后使用findall方法返回所有匹配到的链接地址。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 正则表达式 概述及常用字符 - Python技术站