文章详情

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

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中利用正则表达式的 16个 常见任务

2024-11-29 18:33

关注

安装与导入

首先,确保你的Python环境中已经安装了re模块。这是Python的标准库之一,所以通常不需要额外安装。

import re

字符匹配

单个字符:使用方括号[]表示一组字符中的任意一个。

# 匹配任何字母
pattern = "[a-zA-Z]"
string = "Hello World!"
match = re.search(pattern, string)
print(match.group())  # 输出: H

多个字符:使用*表示零次或多次出现。

# 匹配任意数量的空格
pattern = "\s*"
string = "    Hello World!"
match = re.match(pattern, string)
print(match.group())  # 输出: '    '

范围匹配

使用-定义一个范围内的字符。

# 匹配小写字母a到e
pattern = "[a-e]"
string = "abcdeABCDE"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['a', 'b', 'c', 'd', 'e']

排除字符

使用^排除某些字符。

# 匹配除了a到z之外的所有字符
pattern = "[^a-z]"
string = "123ABCdef"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['1', '2', '3', 'A', 'B', 'C']

字符集组合

可以将多个字符集组合起来使用。

# 匹配数字或大写字母
pattern = "[0-9A-Z]+"
string = "Hello123World"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['123']

位置锚定

^表示行首,$表示行尾。

# 匹配以大写字母开头的单词
pattern = "^[A-Z][a-zA-Z]*"
string = "Hello world"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['Hello']

分组与引用

使用圆括号()来创建一个捕获组。

# 捕获日期格式
pattern = "(\d{4})-(\d{2})-(\d{2})"
string = "Today is 2023-04-01."
match = re.match(pattern, "2023-04-01")
if match:
    year = match.group(1)
    month = match.group(2)
    day = match.group(3)
    print(f"Year: {year}, Month: {month}, Day: {day}")

非捕获组

如果不关心某部分的内容,可以使用(?:)。

# 不捕获中间的冒号
pattern = r"(\d{2}):(?:\d{2}):\d{2}"
string = "09:30:15"
match = re.match(pattern, string)
if match:
    hour = match.group(1)
    print(hour)  # 输出: 09

替换文本

使用re.sub()方法替换字符串中的匹配项。

# 将所有空格替换成下划线
pattern = "\s+"
string = "Hello   World"
new_string = re.sub(pattern, "_", string)
print(new_string)  # 输出: Hello_World

贪婪与非贪婪匹配

# 贪婪匹配
pattern = "<.*>"
string = "

Hello World

" match = re.search(pattern, string) print(match.group()) # 输出:

Hello World

# 非贪婪匹配 pattern = "<.*?>" string = "

Hello World

" match = re.search(pattern, string) print(match.group()) # 输出:

条件分支

使用(?P)命名捕获组,并通过(?P=name)引用它们。

# 匹配重复的单词
pattern = r"\b(\w+)\b\s+\1\b"
string = "hello hello world"
match = re.sub(pattern, r"\1", string, flags=re.IGNORECASE)
print(match)  # 输出: hello world

重复限定符

# 匹配恰好重复三次的字符
pattern = r"a{3}"
string = "aaabbbccc"
matches = re.findall(pattern, string)
print(matches)  # 输出: []

# 匹配至少重复两次的字符
pattern = r"a{2,}"
string = "aaabbbccc"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['aaa']

# 匹配重复两到四次的字符
pattern = r"a{2,4}"
string = "aaabbbccc"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['aaa']

特殊字符

# 匹配包含任何字符的单词
pattern = r"\w+"
string = "hello\nworld"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['hello']

# 匹配特殊字符
pattern = r"\."
string = "hello.world"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['.']

边界限定符

# 匹配单词边界
pattern = r"\bhello\b"
string = "hello world"
matches = re.findall(pattern, string)
print(matches)  # 输出: ['hello']

# 匹配非单词边界
pattern = r"\Bworld\B"
string = "hello world"
matches = re.findall(pattern, string)
print(matches)  # 输出: []

标志位

# 忽略大小写
pattern = r"hello"
string = "Hello world"
matches = re.findall(pattern, string, re.IGNORECASE)
print(matches)  # 输出: ['Hello']

# 多行模式
pattern = r"^hello"
string = "hello\nworld"
matches = re.findall(pattern, string, re.MULTILINE)
print(matches)  # 输出: ['hello']

# 点号匹配换行符
pattern = r"hello.*world"
string = "hello\nworld"
matches = re.findall(pattern, string, re.DOTALL)
print(matches)  # 输出: ['hello\nworld']

实战案例分析

假设我们需要从一段文本中提取所有的邮箱地址。这可以通过正则表达式轻松实现。邮箱地址的一般形式为 username@domain.com。下面是一个简单的示例:

来源:小白PythonAI编程内容投诉

免责声明:

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

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

软考中级精品资料免费领

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

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

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

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

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

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

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