正则表达式练习

以下是一些精心设计的正则表达式练习,结合了 Python 编程文件操作,帮助你熟悉正则表达式在不同场景中的实际应用。


练习一:基本字符匹配

目标:掌握正则表达式的基础功能。

  1. 任务
    • 提取字符串中的所有电话号码(格式如:123-456-78901234567890)。
    • 提取所有以 "test" 开头的单词。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import re

    text = """
    联系人1:123-456-7890
    联系人2:9876543210
    测试数据:test1, test2, testing
    """

    # 匹配电话号码
    phone_pattern = r'\d{3}-\d{3}-\d{4}|\d{10}'
    phones = re.findall(phone_pattern, text)
    print("电话号码列表:", phones)

    # 匹配以 test 开头的单词
    test_pattern = r'\btest\w*\b'
    test_words = re.findall(test_pattern, text)
    print("以 test 开头的单词:", test_words)

练习二:处理文件名

目标:熟悉正则表达式操作文件名。

  1. 任务
    • 在指定文件夹中,找到所有以 test_ 开头的文件。
    • 将这些文件重命名为去掉 test_ 的新名字。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    import os
    import re

    folder_path = r'F:\your_folder' # 替换为你的文件夹路径

    # 正则匹配以 test_ 开头的文件
    pattern = re.compile(r'^test_(.+)$')

    for root, dirs, files in os.walk(folder_path):
    for file in files:
    match = pattern.match(file)
    if match:
    new_name = match.group(1)
    os.rename(os.path.join(root, file), os.path.join(root, new_name))
    print(f"重命名:{file} -> {new_name}")

练习三:文本清洗

目标:使用正则表达式清洗文本数据。

  1. 任务
    • 移除文本中的所有 HTML 标签。
    • 替换所有连续的空白字符为单个空格。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    import re

    text = """
    <html>
    <head><title>测试页面</title></head>
    <body>
    <h1>标题</h1>
    <p>这是一个段落。</p>
    <p> 还有一些 多余的空格。</p>
    </body>
    </html>
    """

    # 移除 HTML 标签
    html_pattern = r'<[^>]+>'
    clean_text = re.sub(html_pattern, '', text)
    print("去掉 HTML 标签后的文本:\n", clean_text)

    # 替换连续空格为单个空格
    space_pattern = r'\s+'
    clean_text = re.sub(space_pattern, ' ', clean_text)
    print("清理空格后的文本:\n", clean_text)

练习四:验证用户输入

目标:使用正则表达式对用户输入进行格式验证。

  1. 任务
    • 验证一个输入是否是有效的电子邮件地址。
    • 验证一个输入是否是有效的 URL。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    import re

    # 验证电子邮件
    email = input("请输入一个电子邮件地址:")
    email_pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    if re.match(email_pattern, email):
    print("有效的电子邮件地址")
    else:
    print("无效的电子邮件地址")

    # 验证 URL
    url = input("请输入一个 URL:")
    url_pattern = r'^https?://[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}(/.*)?$'
    if re.match(url_pattern, url):
    print("有效的 URL")
    else:
    print("无效的 URL")

练习五:提取日志中的 IP 地址

目标:从日志文件中提取所有的 IP 地址。

  1. 任务
    • 打开一个日志文件。
    • 提取其中的所有 IPv4 地址。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
      import re

    # 假设日志内容
    log_data = """
    192.168.0.1 - - [24/Nov/2024:14:15:22] "GET /index.html HTTP/1.1" 200
    10.0.0.5 - - [24/Nov/2024:14:16:00] "POST /form.html HTTP/1.1" 404
    Invalid log entry 123.456.789.0
    """

    # 匹配 IPv4 地址
    ip_pattern = r'((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)'

    # 使用 finditer 获取迭代器
    matches = re.finditer(ip_pattern, log_data)
    ips = [match.group(0) for match in matches]
    print("提取的 IP 地址:", ips)

练习六:复杂文件名处理

目标:掌握文件名匹配和高级正则表达式。

  1. 任务
    • 查找文件夹中的所有符合以下模式的文件名:课程编号_章节名_说明_时间戳.ext
    • 从文件名中提取 课程编号章节名,生成新的文件名格式:课程编号-章节名.ext
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    import os
    import re

    folder_path = r'F:\your_folder' # 替换为你的文件夹路径

    # 匹配复杂文件名
    pattern = re.compile(r'^(课程\d+)_(章节\d+)_.+?_(\d+)\.(.+)$')

    for root, dirs, files in os.walk(folder_path):
    for file in files:
    match = pattern.match(file)
    if match:
    course = match.group(1)
    chapter = match.group(2)
    ext = match.group(4)
    new_name = f"{course}-{chapter}.{ext}"
    os.rename(os.path.join(root, file), os.path.join(root, new_name))
    print(f"重命名:{file} -> {new_name}")

练习七:动态生成正则表达式

目标:掌握在代码中动态构造正则表达式。

  1. 任务
    • 根据用户输入的关键词列表,生成一个动态正则表达式,用来查找文本中包含任意关键词的句子。
  2. 代码模板
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import re

    text = """
    今天我学习了正则表达式,它非常有用。
    Python 编程语言让我感觉很强大。
    我还想学习更多关于人工智能的知识。
    """

    # 用户输入关键词
    keywords = input("请输入关键词,用空格分隔:").split()
    keyword_pattern = '|'.join(map(re.escape, keywords))

    # 动态构造正则表达式
    sentence_pattern = fr'\b.*?({keyword_pattern}).*?\.'
    sentences = re.findall(sentence_pattern, text, re.IGNORECASE)
    print("匹配的句子:", sentences)

通过以上练习,你可以逐步熟悉 正则表达式的匹配规则,以及如何在 Python 文件操作 中使用正则表达式。完成每个任务后,试着改动规则或扩展功能,进一步加深理解!


正则表达式练习
http://example.com/2025/02/04/正则表达式练习/
作者
JunBin Liang
发布于
2025年2月4日
许可协议