Python 正则表达式进阶用法:边界匹配

news/2024/12/28 20:30:43/文章来源:https://www.cnblogs.com/gdutxiaoxu/p/18637910

Python 正则表达式进阶用法:边界匹配

正则表达式是一种强大的工具,用于处理文本中的模式匹配。它广泛应用于文本查找、替换、数据清洗等任务。在学习了正则表达式的基础知识后,掌握更高级的用法将使得正则表达式的应用更加灵活。边界匹配(Boundary Matching)是正则表达式中的一种重要进阶用法,它用于限定匹配字符的位置,而不是字符本身。

在 Python 中,re 模块提供了强大的正则表达式支持,边界匹配是其重要的功能之一。边界匹配符可以帮助我们精确地控制模式的匹配位置,避免不必要的匹配,提高匹配的精确度。

本文将详细讲解 Python 正则表达式中的边界匹配符的使用方法,并通过实例分析其在实际开发中的应用。

1. 什么是边界匹配

边界匹配是指通过正则表达式的边界符号来匹配字符串中的特定位置,而不是字符本身。常见的边界符号包括:

  • \b:单词边界,匹配单词的开头或结尾。
  • \B:非单词边界,匹配不是单词边界的位置。
  • ^:匹配字符串的开始位置。
  • $:匹配字符串的结束位置。

通过使用这些边界匹配符,我们可以实现更加精确的匹配,从而避免匹配到不需要的字符或位置。

2. 正则表达式中的单词边界 \b

\b 是正则表达式中的一个元字符,用来匹配单词的边界。单词边界指的是一个字母、数字或者下划线与一个非字母、数字或者下划线之间的位置。例如,空格、标点符号或者字符串的开始和结束位置都被认为是单词边界。

2.1 \b 的用法

\b 用来匹配单词的开头和结尾,因此它通常用来匹配完整的单词,而不匹配单词的一部分。\b 前后可以跟任意字符,表示我们希望匹配的内容出现在单词的边界处。

例如,我们希望匹配字符串中的单词 "cat",但不希望匹配 "catalog" 或 "scattered" 中的 "cat" 部分,这时可以使用 \b

示例代码

import re# 示例文本
text = "The cat sat on the catalog."# 使用 \b 匹配单词 'cat'
pattern = r"\bcat\b"
matches = re.findall(pattern, text)print(matches)  # 输出 ['cat']

在这个例子中,r"\bcat\b" 匹配的是完整的单词 "cat",因为它被 \b 限制在单词的边界内。因此,虽然 "catalog" 和 "scattered" 中也包含 "cat",它们并没有被匹配到。

2.2 \b 的应用场景

  1. 查找完整单词:当我们希望只匹配完整的单词而不匹配单词的一部分时,\b 非常有用。它确保了匹配的字符是独立的,而不是其他单词的一部分。

  2. 避免误匹配:例如,匹配单词时,使用 \b 可以避免匹配到包含目标单词的更长单词。

2.3 匹配单词边界的负面示例

text = "He is a catalog user."# 错误的匹配方式,想匹配 cat,但也会匹配 catalog 中的 'cat'
pattern = r"cat"
matches = re.findall(pattern, text)
print(matches)  # 输出 ['cat', 'cat'],错误地匹配到 catalog 中的 'cat'

这里,cat 直接作为目标模式,会匹配到 "catalog" 中的 "cat",导致误匹配。而使用 \bcat\b 就能确保只匹配到 "cat" 作为独立单词。

3. 正则表达式中的非单词边界 \B

\B 是正则表达式中的一个元字符,用来匹配非单词边界。与 \b 相反,\B 用于匹配不是单词边界的位置。

3.1 \B 的用法

\B 用于匹配字符串中非单词边界的部分。它常常用于排除在单词边界上的匹配,从而让我们匹配单词的一部分。

示例代码

import re# 示例文本
text = "The cat sat on the catalog."# 使用 \B 匹配 'cat' 在非单词边界的位置
pattern = r"\Bcat\B"
matches = re.findall(pattern, text)print(matches)  # 输出 ['cat']

在这个例子中,r"\Bcat\B" 匹配的是单词 "cat" 的一部分,它要求 "cat" 既不能出现在单词的开始,也不能出现在单词的结尾。

3.2 \B 的应用场景

  1. 匹配单词内部:如果我们希望匹配某个单词的一部分,而不匹配整个单词,可以使用 \B。例如,匹配 "cat" 在 "catalog" 或 "scattered" 中的部分。

  2. 避免边界匹配\B 可以用来避免匹配单词的边界,确保匹配的内容不出现在单词的开头或结尾。

3.3 \B\b 的区别

  • \b 匹配单词的边界,例如字符串中的空格、标点、换行等。
  • \B 匹配非单词边界的位置,它表示字符串中两个字符间不为边界的位置。
# 示例文本
text = "The cat sat on the catalog."# \b 匹配单词边界,匹配完整单词 'cat'
pattern_b = r"\bcat\b"
print(re.findall(pattern_b, text))  # 输出 ['cat']# \B 匹配非单词边界,匹配 'cat' 在 'catalog' 中的部分
pattern_B = r"\Bcat\B"
print(re.findall(pattern_B, text))  # 输出 ['cat']

4. 正则表达式中的字符串开始和结束 ^$

^$ 分别用于匹配字符串的开始和结束位置。

4.1 ^ 的用法

^ 是用来匹配字符串的开头,它要求模式匹配的内容必须出现在字符串的最前面。

示例代码

import retext = "Hello world"# 使用 ^ 匹配字符串开始
pattern_start = r"^Hello"
matches = re.findall(pattern_start, text)print(matches)  # 输出 ['Hello']

在这个例子中,r"^Hello" 只会匹配字符串 "Hello world" 中以 "Hello" 开头的部分。

4.2 $ 的用法

$ 是用来匹配字符串的结尾,它要求模式匹配的内容必须出现在字符串的最后面。

示例代码

import retext = "Hello world"# 使用 $ 匹配字符串结束
pattern_end = r"world$"
matches = re.findall(pattern_end, text)print(matches)  # 输出 ['world']

在这个例子中,r"world$" 只会匹配字符串 "Hello world" 中以 "world" 结尾的部分。

4.3 ^$ 的应用场景

  1. 匹配完整字符串:当我们希望确保字符串从某个特定内容开始,或者以某个特定内容结尾时,^$ 非常有用。例如,匹配文件路径或 URL 时,常常需要验证字符串的开始和结束。

  2. 排除中间部分匹配^$ 可以帮助排除匹配字符串中间部分的内容。例如,确保某个单词位于字符串的开头或结尾。

5. 实战案例:边界匹配的应用

让我们通过一个具体的例子来展示边界匹配的实际应用场景。假设我们需要从一个文档中提取出以 "http://" 或 "https://" 开头的 URL。

示例代码

import retext = """
Visit our website at http://www.example.com for more information.
You can also check out our secure page at https://secure.example.com.
For more details, visit http://www.test.com.
"""# 匹配以 'http://' 或 'https://' 开头的 URL
pattern = r"\bhttps?://\S+"
matches = re.findall(pattern, text)print(matches)  # 输出 ['http://www.example.com', 'https://secure.example.com', 'http://www.test.com']

在这个例子中,r"\bhttps?://\S+" 用了 \b 来确保 URL 的开始部分是单词边界,并使用 https? 匹配 "http://" 或 "https://" 开头的 URL。

6. 总结

边界匹配是 Python 正则表达式中非常有用的一种技巧。它允许我们精确地控制匹配的范围,避免匹配到不需要的部分。通过使用 \b\B^$,我们可以在不同的场景中应用正则表达式进行更细粒度的文本处理。

  1. \b 用于匹配单词的边界。
  2. \B 用于匹配非单词边界。
  3. ^ 用于匹配字符串的开头。
  4. $ 用于匹配字符串的结尾。

掌握边界匹配的用法可以帮助我们在数据清洗、文本处理等场景中提高正则表达式的精准度和效率。在实际应用中,合理使用边界符号能够使我们的正则表达式更加高效和灵活。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860526.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-BLOG3

一:前言知识点总结题目集7控制设备:引入了开关、分档调速器、连续调速器和互斥开关四种控制设备,重点在于理解这些设备的工作原理及其在电路中的作用。 受控设备:包括灯(白炽灯、日光灯)和风扇(吊扇、落地扇),以及新增的受控窗帘。主要考察学生对不同设备工作状态的理…

学习笔记 - 汉明码

汉明码属于一种具备纠错功能的线性分组码。 在数据传输时,受外界干扰影响,单个比特可能产生差错。汉明码借助添加的冗余监督位,依照特定规则精准判断出错比特位,进而完成纠正,确保信息恢复如初,宛如给数据披上一层“防护甲”,使其即便处于复杂环境,也能维持精准可靠,在…

学习笔记 - 摩斯电码

摩斯电码由美国人塞缪尔莫尔斯等人发明,仅用“”(点)与“-”(划)两种符号,按不同排列组合来代表英文字母、数字和标点。起初应用于有线电报,后应用到无线电通信,曾长期担任关键角色。如今,虽因通信技术革新而不再主流,但在业余无线电爱好者群体中依旧流行,紧急救援时…

2024第一届Solar杯应急响应挑战赛WP

对于一个只学了2个月的小白来说这种比赛难度还是太高了,还要沉淀一下QAQ 内存取证-1 题目描述 题目文件:SERVER-2008-20241220-162057 请找到rdp连接的跳板地址 flag格式 flag{1.1.1.1} 先imageinfo然后netscan F:\CTF软件合集\Misc杂项\隐写工具\取证类\volatility\Volatili…

App信息收集

引子:上一章主要介绍了信息收集中的Web信息收集,包括要收集什么信息、该怎样去做等内容。而本章则简单介绍一下当目标为App时该如何进行信息收集。由于本篇章为信息收集篇,因此很多内容笔者并没有深究(ps:其实是深究不明白),或许等一轮学完后再回头看时会明白很多吧。免…

基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)PSO优化过程: PSO优化前后,模型训练对比: 数据预测对比: 误差回归对比: 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)LR = g1(1); NN1 = floor(g1…

软件工程我依然爱你

用一个词总结软工实践课程——Never forget!!!😚😚😚 前言现在是2024年12月27号下午4点,是我考完软件工程课程的四小时,也是我软工实践结束的第27天。我竟莫名对软件工程有点不舍,特别是我们倾注大量心血的项目——福小研,我愿称之为我心里最好的项目之一,或许它…

2024省选联测1

2024省选联测1题目来源: 2024省选联测1 \(T1\) HZTG5808. interval \(40pts\)原题: QOJ 1173. Knowledge Is..考虑按照左端点升序排序后反悔贪心。分别维护已经匹配的区间对和未被匹配的区间,若当前区间 \(a\) 可以和前面剩余的未被匹配的区间匹配则直接匹配;否则尝试找到一…

2024-2025-1 20241407《计算机基础与程序设计》第十四周学习总结

作业信息这个作业属于哪个课程 2024-2025-1计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第十四周作业这个作业的目标 学习二进制文件和文本文件,文件的打开和关闭,顺序读写与随机读写,标准输入和输出及其重定向作业正文 本博客教材学习内容总结…

GraphMAE2(解码增强型掩码自监督图学习器)

GraphMAE2: A Decoding-Enhanced Masked Self-Supervised Graph Learner 解码增强型掩码自监督图学习器 背景 ​ 近年来,自监督学习(Self-supervised Learning,SSL)得到了广泛的探索,特别是生成式自监督学习在自然语言处理以及其他人工智能领域已经取得了新兴的成功,像…

PTA第7~8次大作业分析及总结

一、前言 本次Blog为第七~八次大作业的总结。两次大作业主要考察抽象类及继承方面的相关内容,是在第六次大作业基础上的进一步升级,难度大幅提升,由于前面的作业我没有很好地完成,这两次大作业也没有拿到好成绩,这也算是提醒我:在进行一个设计时要提前为后续更加预留空间…

python3网络爬虫开发实战-第2版PDF免费下载

本书介绍了如何利用 Python 3 开发网络爬虫。本书为第 2 版,相比于第 1 版,为每个知识点的实战项目配备了针对性的练习平台,避免了案例过期的问题。另外,主要增加了异步爬虫、JavaScript 逆向、App 逆向、页面智能解析、深度学习识别验证码、Kubernetes 运维及部署等知识点…