当前位置: 首页 > article >正文

【正则表达式 PYTHON】

一、什么是正则表达式?

正则表达式是一种用于匹配文本模式的工具。它是一个特殊的字符序列,可以帮助你在文本中查找、替换或验证符合特定规则的字符串。例如,你可以使用正则表达式来检查一个字符串是否是一个有效的电子邮件地址、电话号码,或者从一段文本中提取所有的数字。

在 Python 中,通过re模块来支持正则表达式的操作。

二、re 模块的基本函数

  1. re.match()
    • 功能:尝试从字符串的起始位置匹配一个模式。如果匹配成功,返回一个匹配对象;如果失败,返回None
    • 示例:
import re
text = "Hello, world!"
pattern = "Hello"
match_result = re.match(pattern, text)
if match_result:
    print("匹配成功")
else:
    print("匹配失败")
  • 在这个例子中,re.match()会尝试从text字符串的开头匹配pattern(即 “Hello”),因为文本开头是 “Hello”,所以匹配成功。

  1. re.search()
    • 功能:在整个字符串中搜索第一个匹配给定模式的子串。如果找到,返回一个匹配对象;如果没有找到,返回None
    • 示例:
import re
text = "The quick brown fox jumps over the lazy dog"
pattern = "fox"
search_result = re.search(pattern, text)
if search_result:
    print("找到匹配的子串")
else:
    print("未找到匹配的子串")
  • 这里re.search()会在整个text字符串中查找 “fox”,找到后返回匹配对象。
  1. re.findall()
    • 功能:在字符串中找到所有匹配给定模式的子串,并返回一个列表。如果没有匹配的子串,返回一个空列表。
    • 示例:
import re
text = "apple,banana,cherry"
pattern = "[a - z]+"
findall_result = re.findall(pattern, text)
print(findall_result) 
  • 这个正则表达式[a - z]+会匹配一个或多个连续的小写字母。re.findall()会在text中找到所有符合这个模式的子串,返回一个包含 “apple”、“banana” 和 “cherry” 的列表。
  1. re.sub()
    • 功能:用于在字符串中替换所有匹配给定正则表达式的子串。
    • 示例:
import re
text = "I have 3 apples and 2 bananas"
pattern = "[0 - 9]+"
new_text = re.sub(pattern, "some", text)
print(new_text)
  • 这里re.sub()会将text中所有匹配[0 - 9]+(一个或多个数字)的子串替换为 “some”,最后输出的new_text为 “I have some apples and some bananas”。

三、正则表达式的基本语法

  1. 字符类
    • 方括号[]用于定义字符类。例如,[abc]可以匹配abc中的任意一个字符。
    • 范围表示法:[a - z]可以匹配从az的所有小写字母,[0 - 9]可以匹配所有数字。
  2. 量词
    • *:匹配前面的字符零次或多次。例如,a*可以匹配空字符串、aaaaaa等。
    • +:匹配前面的字符一次或多次。例如,a+可以匹配aaaaaa等,但不能匹配空字符串。
    • ?:匹配前面的字符零次或一次。例如,a?可以匹配空字符串或a
    • {n}:匹配前面的字符恰好n次。例如,a{3}可以匹配aaa
    • {n,}:匹配前面的字符至少n次。例如,a{2,}可以匹配aaaaaaaaa等。
    • {n,m}:匹配前面的字符至少n次且最多m次。例如,a{1,3}可以匹配aaaaaa
  3. 元字符
    • .:匹配除换行符\n之外的任意一个字符。例如,a.b可以匹配aaba0b等。
    • ^:在字符类[]外,用于匹配字符串的开头。例如,^Hello可以匹配以Hello开头的字符串。在字符类[]内,^表示取反。例如,[^abc]可以匹配除abc之外的任意字符。
    • $:用于匹配字符串的结尾。例如,world$可以匹配以world结尾的字符串。
    • \:用于转义字符。例如,\*匹配*字符本身,因为*在正则表达式中有特殊含义。

四、编译正则表达式(可选但高效)

你可以使用re.compile()函数来编译一个正则表达式模式。这在需要多次使用同一个模式进行匹配等操作时非常有用,因为编译后的模式可以提高匹配效率。

示例:

import re
pattern = re.compile("[a - z]+")
text1 = "apple"
text2 = "123"
match_result1 = pattern.match(text1)
match_result2 = pattern.match(text2)
if match_result1:
    print("text1匹配成功")
if match_result2:
    print("text2匹配成功")

在这个例子中,先编译了一个匹配一个或多个小写字母的正则表达式模式。然后用这个编译后的模式分别对text1text2进行匹配操作。


http://www.kler.cn/a/404274.html

相关文章:

  • JavaSrcipt 函数高级
  • @RequestBody、@Data、@Validated、@Pattern(regexp=“?“)(复习)
  • 4.langchain中的prompt模板 (partially format prompt templates)
  • 影视后期学习Ⅰ~
  • 【前端】JavaScript中的indexOf()方法详解:基础概念与背后的应用思路
  • maven父子项目
  • 视觉顶会论文 | 基于Swin Transformer的轴承故障诊断
  • 每日一题 LCR 079. 子集
  • 【Linux】<共享内存应用>——模拟实现不同进程把hello字符对<共享内存文件对象>的放入和取出操作
  • Seatunnel运行时报错Caused by: java.lang.NoClassDefFoundError: com/mysql/cj/MysqlType
  • 2024年亚太地区数学建模大赛C题-宠物行业及相关行业的发展分析与策略
  • 如何查看 Android 项目的依赖结构树
  • 集成学习的起源与哲学
  • Qt添加外部库:静态库和动态库,批量添加头文件
  • 【XSS】payload#1
  • 利用oss进行数据库和网站图片备份
  • Flowable第三篇、Flowable之任务分配(任务分配、流程变量、候选人和候选人组)
  • 【Lucene】搜索引擎和文档相关性评分 BM25 算法的工作原理
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:资源分配与负载均衡的协同(下)(24 / 30)
  • 如何使用GPT API 自定义 自己的 RAG
  • [羊城杯 2020]easyre
  • Java基础夯实——2.6 Java中的锁
  • 【Linux网络编程】套接字使用--TCP echo server的实现
  • 【腾讯云产品最佳实践】腾讯云CVM入门技术与实践:通过腾讯云快速构建云上应用
  • Jmeter中的断言(三)
  • 《Vue零基础入门教程》第一课:Vue简介