正则表达式练习
以下是一些精心设计的正则表达式练习,结合了 Python 编程 和 文件操作,帮助你熟悉正则表达式在不同场景中的实际应用。
练习一:基本字符匹配
目标:掌握正则表达式的基础功能。
- 任务:
- 提取字符串中的所有电话号码(格式如:123-456-7890或1234567890)。
- 提取所有以 "test" 开头的单词。
 
- 提取字符串中的所有电话号码(格式如:
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17import 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)
练习二:处理文件名
目标:熟悉正则表达式操作文件名。
- 任务:
- 在指定文件夹中,找到所有以 test_开头的文件。
- 将这些文件重命名为去掉 test_的新名字。
 
- 在指定文件夹中,找到所有以 
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15import 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}")
练习三:文本清洗
目标:使用正则表达式清洗文本数据。
- 任务:
- 移除文本中的所有 HTML 标签。
- 替换所有连续的空白字符为单个空格。
 
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22import 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)
练习四:验证用户输入
目标:使用正则表达式对用户输入进行格式验证。
- 任务:
- 验证一个输入是否是有效的电子邮件地址。
- 验证一个输入是否是有效的 URL。
 
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17import 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 地址。
- 任务:
- 打开一个日志文件。
- 提取其中的所有 IPv4 地址。
 
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16import 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)
练习六:复杂文件名处理
目标:掌握文件名匹配和高级正则表达式。
- 任务:
- 查找文件夹中的所有符合以下模式的文件名:课程编号_章节名_说明_时间戳.ext。
- 从文件名中提取 课程编号和章节名,生成新的文件名格式:课程编号-章节名.ext。
 
- 查找文件夹中的所有符合以下模式的文件名:
- 代码模板: 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18import 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
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16import 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/正则表达式练习/