文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python正则表达式:十个正则表达式应用实例

2024-11-29 19:23

关注

实例1:基本匹配

目标:找出字符串中的所有单词。

import re

text = "Hello, world! Welcome to Python programming."
words = re.findall(r'\b\w+\b', text)
print(words) # 输出: ['Hello', 'world', 'Welcome', 'to', 'Python', 'programming']

解释:\b表示单词边界,\w+匹配一个或多个字母数字字符。

实例2:数字提取

目标:提取电话号码(假设格式为XXX-XXXX-XXXX)。

phone_numbers = "My number is 123-456-7890."
matches = re.findall(r'\d{3}-\d{4}-\d{4}', phone_numbers)
print(matches) # 输出: ['123-456-7890']

技巧:\d代表数字,{n}指定重复次数。

实例3:邮箱地址匹配

目标:从一段文本中找出所有邮箱地址。

text_email = "Contact us at info@example.com or support@example.co.uk."
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text_email)
print(emails) # 输出: ['info@example.com', 'support@example.co.uk']

注意:邮箱地址的正则表达式相对复杂,但能匹配大多数格式。

实例4:替换操作

目标:将所有的“Python”替换为“Python编程”。

text_replace = "Python is fun. I love Python."
updated_text = re.sub(r'Python', 'Python编程', text_replace)
print(updated_text) # 输出: Python编程 is fun. I love Python编程.

功能:re.sub()用于替换匹配到的内容。

实例5:贪婪与非贪婪匹配

目标:提取HTML标签间的文本,考虑非贪婪匹配。

html_text = "

Hello, world!

Welcome!
" content = re.findall(r'<[^>]*>(.*?)]*>', html_text, re.DOTALL) print(content) # 输出: ['Hello, world!', 'Welcome!']

关键:?使匹配非贪婪,re.DOTALL使.匹配包括换行在内的所有字符。

实例6:分组与引用

目标:提取网址的协议和主机部分。

url = "https://www.example.com/path"
protocol, host = re.search(r'^(https?://)([^/]+)', url).groups()
print(protocol, host) # 输出: https:// www.example.com

解析:圆括号定义了分组,\1和\2引用分组内容。

实例7:重复模式

目标:匹配连续的数字序列。

sequence = "123456789012345"
consecutive_digits = re.findall(r'(\d)\1+', sequence)
print(consecutive_digits) # 输出: ['1', '2', '3', '4', '5']

技巧:\1+匹配至少一次前面的分组。

实例8:否定预查

目标:查找不以数字开头的单词。

text = "3 apples, no bananas, 10 oranges."
words = re.findall(r'\b(?!\d)\w+\b', text)
print(words) # 输出: ['apples,', 'no', 'bananas,', 'oranges.']

解释:(?!...)是负向前瞻,确保其后不匹配特定模式。

实例9:条件匹配

目标:区分邮箱的教育和商业账号。

email_text = "edu@example.edu biz@example.biz"
edu_or_biz = re.findall(r'(\w+@)(edu|biz)\.', email_text)
print(edu_or_biz) # 输出: [('edu@example.', 'edu'), ('biz@example.', 'biz')]

使用:通过条件分支实现特定匹配。

实例10:全局标志

目标:大小写不敏感的搜索。

mixed_case = "Python is fun. PYTHON too!"
result = re.findall(r'python', mixed_case, re.IGNORECASE)
print(result) # 输出: ['Python', 'PYTHON']

标志:re.IGNORECASE忽略大小写。

实战案例:清理CSV文件中的无效数据

场景:从CSV文件中移除非数字的手机号码记录。

import csv
import re

# 假设手机号码应为10位数字
pattern = re.compile(r'^\d{10}$')

with open('phone_numbers.csv', 'r') as file:
    reader = csv.reader(file)
    cleaned_data = []
    for row in reader:
        if pattern.match(row[0]):  # 假设手机号码在第一列
            cleaned_data.append(row)

# 将清洗后的数据保存到新文件
with open('cleaned_phone_numbers.csv', 'w', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(cleaned_data)

分析:此案例展示了如何结合正则表达式和文件操作来处理实际问题,确保数据质量。

通过上述实例和实战案例,你已经掌握了Python正则表达式的基础到进阶应用。

来源:手把手PythonAI编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯