2.4.1 基础函数使用
re.findall(pattern,string)
功能: 根据正则表达式匹配目标字符串内容
参数: pattern 正则表达式
string 目标字符串
返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容
re.split(pattern,string,max)
功能: 使用正则表达式匹配内容,切割目标字符串
参数: pattern 正则表达式
string 目标字符串
max 最多切割几部分
返回值: 切割后的内容列表
re.sub(pattern,replace,string,count)
功能: 使用一个字符串替换正则表达式匹配到的内容
参数: pattern 正则表达式
replace 替换的字符串
string 目标字符串
count 最多替换几处,默认替换全部
返回值: 替换后的字符串
正则函数使用示例:
import re
string = "Alex:1996,Sunny:1998"
# 使用## 替换正则表达式匹配到的内容
result = re.sub("\W+","##",string,2)
print(result)
# 使用匹配内容分割字符串
# result = re.split("\W+",string)
# print(result)
# 如果正则表达式有子组,那么只返回子组对应内容
# result = re.findall("(\w+):(\d+)",string)
# print(result)
2.4.2 生成match对象
re.finditer(pattern,string)
功能: 根据正则表达式匹配目标字符串内容
参数: pattern 正则表达式
string 目标字符串
返回值: 匹配结果的迭代器
re.match(pattern,string)
功能:匹配某个目标字符串开始位置
参数:pattern 正则
string 目标字符串
返回值:匹配内容match object
re.search(pattern,string)
功能:匹配目标字符串第一个符合内容
参数:pattern 正则
string 目标字符串
返回值:匹配内容match object
2.4.3 match对象使用
-
span() 获取匹配内容的起止位置
-
group(n = 0)
功能:获取match对象匹配内容
参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容
返回值:匹配字符串
正则函数使用示例:
import re
string = "Alex:1996,Sunny:1998"
# 匹配开始位置
result = re.match("(\w+):(?P<year>\d+)",string)
print(result.group(2))
# 匹配第一处
result = re.search("\d+",string)
print(result.group())
# result = re.finditer("\w+",string)
#
# # 迭代取值 获取每处匹配内容的match对象
# for item in result:
# print("匹配内容:",item.group())
# print("所在位置:",item.span())
综合练习:基于 inet.log完成
编写程序,通过输入一个端口名称(每段首个单词)打印出这个端口描述信息中的address is 的值
提示: 段落之间有空行
端口名称是每段第一个单词
思路: 根据输入的端口名称找到段落
在段落中匹配目标
import re
# 生成器函数
def parg():
file = open("inet.log") # 读方式
# 每次while循环data获取一段内容
while True:
data = ""
for line in file:
if line == "\n":
break
data += line
if data:
yield data # 对外提供一段内容
else:
return # 到了文件结尾
def main():
# 获取端口
port = input("端口名称:")
for data in parg():
# 看一下每段首个单词是否为 port
head = re.match("\S+",data).group() # 得到首个单词
if head == port:
address = re.search("([0-9a-f]{4}\.?){3}",data).group()
return address
return "Not Found"
# 程序入口
print(main())