正则表达式之Python re模块使用

本文详细介绍了Python正则表达式库re的基础函数如re.findall,re.split,re.sub以及match对象的使用方法,包括finditer、match和search的区别,并通过实际案例演示了如何从inet.log文件中根据端口名称提取地址信息。
摘要由CSDN通过智能技术生成
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())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NJU_AI_NB

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值