目录

  • 前言
    • ●  Python解释器安装
    • ●  PyCharm开发环境
  • Python程序设计实验
    • ●  实验1 IDLE与代码编写规范
    • ●  实验2 输入输出与数据类型
    • ●  实验3 字符串处理
    • ●  实验4 数据运算
    • ●  实验5 列表与元组应用
    • ●  实验6 字典与集合应用
    • ●  实验7 if语句与match语句
    • ●  实验8 使用循环语句
    • ●  实验9 异常处理
    • ●  实验10 函数应用
    • ●  实验11 类的应用
    • ●  实验12 模块应用
    • ●  实验13  应用re模块
    • ●  实验14 文件处理
    • ●  实验15 用户界面设计
    • ●  实验18 SQLite数据库应用
    • ●  理论考试模拟试题A
    • ●  理论考试模拟试题B
    • ●  理论考试模拟试题C
    • ●  理论考试模拟试题D
  • 学习参考
    • ●  01 Python及其IDLE环境
    • ●  02 Python代码规范
    • ●  03 常量和变量
    • ●  04 输入输出
    • ●  05 运算符
    • ●  06 数值类型
    • ●  07 字符串
    • ●  08 列表
    • ●  09 元组
    • ●  10 字典
    • ●  11 集合
    • ●  12 条件语句
    • ●  13 循环语句
    • ●  14 异常处理
    • ●  15 自定义函数
    • ●  16 内置函数
    • ●  17 模块导入与定义
    • ●  18 math模块
    • ●  19 os模块
    • ●  20 time模块
    • ●  21 random模块
    • ●  22 文本文件
    • ●  23 二进制文件
    • ●  24 类的创建和使用
    • ●  25 类的继承与多态
 实验13  应用re模块
任务1 re模块-使用match函数

要求:

1、使用re模块的match函数验证输入的字符串是否为有效的电子邮件地址:A@B.C。其中A为6至15个数字或英文字母;B为2至10个数字或英文字母;C只能是com、cn或net。

2、程序保存到:s13t1.py

3、程序执行效果1:

输入邮件地址:user123@example.com

检查结果=有效

4、程序执行效果2:

输入邮件地址:123ww@example.org

检查结果=无效

【参考与提示】

    利用re模块的match函数可从字符串的起始位置开始匹配。

1、格式:match(p,s,f)

(1)p:指定正则表达式

(2)s:要匹配的字符串

(3)f:匹配标志

2、正则表达式应指定:

(1)A匹配数字或英文字母:"[0-9a-zA-Z]",使用{m,n}格式限制匹配至少m次,最多n次。B匹配设置类同。

(2)C匹配"(com|cn|net)"。

(3)必须匹配行尾。


import re

# 定义邮箱地址的正则表达式模式

# ^:匹配字符串的开始位置

# [0-9a-zA-Z]{6,15}:匹配6到15位的数字或字母(邮箱用户名部分)

# @:匹配邮箱地址中的@符号

# [0-9a-zA-Z]{2,10}:匹配2到10位的数字或字母(邮箱域名的第一部分)

# \.:匹配邮箱地址中的点号(需要转义)

# (com|cn|net):匹配邮箱域名的后缀,限定为com、cn或net中的一个

# $:匹配字符串的结束位置

pattern = r'^[0-9a-zA-Z]{6,15}@[0-9a-zA-Z]{2,10}\.(com|cn|net)$'


email = input("输入邮件地址:")

# 使用re.match( )函数在字符串的开始位置进行模式匹配

# 如果匹配成功,返回一个匹配对象;否则返回None

result = re.match(pattern, email)


if result:

    print("检查结果=有效")

else:

    print("检查结果=无效")


任务2 re模块-使用search函数

要求:

1、使用re模块的search函数从输入的字符串中提取前2个小数。假定小数个数不少于2个,不考虑负号。

2、程序保存到:s13t2.py。

3、程序执行效果:

输入字符串:ka%15.9adv7.8%uybd5.6cc

提取结果=15.9,7.8

【参考与提示】

    利用re模块的search函数可从字符串的任意位置开始匹配,并通过函数返回的Match对象的groups函数得到提取结果。

1、格式:search(p,s,f)

(1)p:指定正则表达式

(2)s:要匹配的字符串

(3)f:匹配标志

2、正则表达式应指定为"A.*\D+B"格式.其中".*\D"表示任意个字符后至少1个非数字字符。A,B为小数限制(应为模式组)。

import re

s = input("输入字符串:")

# 正则表达式解析:

# (\d+\.\d+):这是一个捕获组,用于匹配一个小数。\d+ 表示匹配一个或多个数字,\. 表示匹配小数点,所以该捕获组可以匹配如 12.34 这样的小数

# \D+:匹配一个或多个非数字字符(如字母、符号等),用于分隔两个小数

# (\d+\.\d+):第二个捕获组,同样匹配一个小数

match = re.search(r'(\d+\.\d+)\D+(\d+\.\d+)', s)


# 提取匹配到的两个小数,并使用逗号连接成字符串

# match.group(1):获取第一个捕获组的内容(即第一个小数)

# match.group(2):获取第二个捕获组的内容(即第二个小数)

result = f"{match.group(1)},{match.group(2)}"

print(f"提取结果={result}")


任务3 re模块-使用findall函数

要求:

1、使用re模块的findall函数从输入字符串中提取所有电子邮箱地址并显示。假定电子邮箱地址为"A@B"格式:

(1)A仅包含英文字母或数字,长度为4至10。

(2)B为"qq.com"或"sina.cn"。

2、程序保存到:s13t3.py

3、程序执行效果:

输入字符串:a=x8u1@qq.com,b=x215@sina.com.cn.

提取结果:

x8u1@qq.com

x215@sina.com.cn

【参考与提示】

求解思路:

1、使用findall函数搜索。

2、正则表达式为"A@B"形式:

(1)A:使用[]限制可用字符,{m,n}限制长度。

(2)B:使用"|"匹配(需分组但不作子模式)。

3、使用循环语句输出findall函数的返回值(列表)的元素(即搜索出的电子邮件地址)。

import re

s = input("输入字符串:")

# 正则表达式 r'[A-Za-z0-9]{4,10}@(?:qq\.com|sina\.com\.cn)' 的含义如下:

#    [A-Za-z0-9] 表示一个字符集,匹配任意一个大写字母(A - Z)、小写字母(a - z)或数字(0 - 9)

#    {4,10} 是一个量词,规定前面的字符集必须连续出现 4 到 10 次,用于匹配邮箱地址中用户名的部分

#    @:是邮箱地址中用户名和域名的分隔符

#   (?:qq\.com|sina\.com\.cn):

#    (?: ... ) 是一个非捕获组,它的作用是对其中的内容进行分组,但不捕获匹配结果

#    qq\.com|sina\.com\.cn 表示一个或关系,即可以匹配 "qq.com" 或者 "sina.com.cn",用于匹配邮箱地址的域名部分

#    其中的 \. 是对 . 的转义,因为在正则表达式中 . 有特殊含义,需要用 \. 来表示真正的点号

pattern = r'[0-9a-zA-Z]{4,10}@(?:qq\.com|sina\.com\.cn)'

email_list = re.findall(pattern, s)

print("提取结果:")

for email in email_list:

    print(email)


任务4 re模块-使用sub函数

要求:

1、将输入的点坐标序列的每个点的两个坐标(均为非负整数)互换

2、输出处理后的字符串。

3、程序保存到:s13t4.py

4、程序执行效果:

输入字符串:(3,2),(5,6)

替换结果:(2,3),(6,5)

【参考与提示】

    re模块的sub函数用于将匹配到的数据进行替换,并返回替换后的字符串。

求解思路:

    调用re模块的sub函数进行替换:

1、正则表达式设置为"AB,CD"形式:

(1)A:为"(",但不能直接使用,需转义。

(2)B:为模式组,限制点的第一个坐标。

(3)C:为模式组,限制点的第二个坐标。

(4)D:为")",但不能直接使用,需转义。

2、参数repl需指定为"(A,B)"形式,A为第二组的编号,B为第一组的编号。


import re

s = input("输入字符串:")

# 正则表达式 r'\((\d+),(\d+)\)'解析:

# \( 表示匹配左括号 (,需要转义

# (\d+) 是第一个模式组,用于匹配一个或多个数字,代表点的第一个坐标

# , 表示匹配逗号

# (\d+) 是第二个模式组,用于匹配一个或多个数字,代表点的第二个坐标

# \) 表示匹配右括号 ),需要转义

pattern = r'\((\d+),(\d+)\)'

# 使用 re.sub 函数进行替换

# r'(\2,\1)' 是替换规则,\2 表示第二个模式组匹配的内容,\1 表示第一个模式组匹配的内容

# input_str 是要进行替换操作的字符串

result = re.sub(pattern, r'(\2,\1)', s)

# 输出替换结果

print(f"替换结果:{result}")


任务5 自定义模块

要求:

1、自定义模块:

(1)编写函数count(s),用于统计字符串s中小写英文字母出现的个数。

(2)保存到:mk13t5.py

2、编写主程序:

(1)导入上面定义的模块。

(2)调用自定义模块中的count函数,计算输入的字符串中小写英文字母出现的个数。

(3)程序保存到:s13t5.py。

(4)程序执行效果:

输入1个字符串:35abD88acdfA=9

小写英文字母个数=6

【参考与提示】

    自定义模块与主程序在同一个文件夹,主程序可直接导入该模块。


# 自定义模块 mk13t5

def count(s):

    """

    此函数用于统计字符串 s 中小写英文字母出现的个数

    :参数 s: 输入的字符串

    :返回值: 小写英文字母的个数

    """

    num = 0

    for c in s:

        if 'a' <= c <= 'z':

            num = num + 1

    return num


# s13t5.py

# 导入自定义模块 mk13t5

import mk13t5

s = input("输入1个字符串:")

# 调用自定义模块中的 count 函数,统计小写英文字母的个数

result = mk13t5.count(s)

print(f"小写英文字母个数={result}")