【Python】正则表达式

ops/2024/10/30 18:39:00/

在Python中,正则表达式相关的函数主要定义在re模块中。以下是一些常用的正则表达式函数及其说明:

正则表达式基本语法

1. 元字符

  • . :匹配除换行符外的任何单个字符。
    • 示例a.b 可以匹配 acba1b 等。
  • ^ :匹配字符串的开始。
    • 示例^Hello 匹配以 Hello 开始的字符串。
  • $ :匹配字符串的结束。
    • 示例world$ 匹配以 world 结束的字符串。
  • * :匹配前面的字符零次或多次。
    • 示例a* 匹配 """a""aa" 等。
  • + :匹配前面的字符一次或多次。
    • 示例a+ 匹配 "a""aa",但不匹配 ""
  • ? :匹配前面的字符零次或一次。
    • 示例a? 匹配 """a"
  • {n} :匹配前面的字符恰好 n 次。
    • 示例a{2} 匹配 "aa"
  • {n,} :匹配前面的字符至少 n 次。
    • 示例a{2,} 匹配 "aa""aaa" 等。
  • {n,m} :匹配前面的字符至少 n 次,且不超过 m 次。
    • 示例a{1,3} 匹配 "a""aa""aaa"

2. 字符类

  • [...] :匹配字符集中的任意一个字符。
    • 示例[abc] 匹配 abc
  • [^...] :匹配不在字符集中的任意字符。
    • 示例[^abc] 匹配除 abc 以外的字符。
  • \d :匹配任何数字,等同于 [0-9]
    • 示例\d+ 匹配一个或多个数字。
  • \D :匹配任何非数字字符。
    • 示例\D+ 匹配一个或多个非数字字符。
  • \w :匹配任何字母数字字符,等同于 [a-zA-Z0-9_]
    • 示例\w+ 匹配一个或多个字母数字字符。
  • \W :匹配任何非字母数字字符。
    • 示例\W+ 匹配一个或多个非字母数字字符。
  • \s :匹配任何空白字符,包括空格、制表符等。
    • 示例\s+ 匹配一个或多个空白字符。
  • \S :匹配任何非空白字符。
    • 示例\S+ 匹配一个或多个非空白字符。

3. 断言

  • (?=...) :正向预测,检查后面是否匹配某模式,但不消耗字符。
    • 示例a(?=b) 匹配 a,后面跟着 b
  • (?!...) :负向预测,检查后面是否不匹配某模式。
    • 示例a(?!b) 匹配 a,后面不跟 b

4. 分组

  • (...) :用于分组,可以应用量词或捕获匹配结果。
    • 示例(abc)+ 匹配一个或多个 abc

5. 示例代码

下面是一个使用Python的正则表达式示例,演示如何使用上述语法:

import re  text = "Hello 123, this is a test: http://example.com/abc."  # 示例匹配数字  
numbers = re.findall(r'\d+', text)  
print("数字:", numbers)  # 输出: 数字: ['123']  # 示例以Hello开头的字符串  
if re.match(r'^Hello', text):  print("字符串以'Hello'开头")  # 示例匹配URL  
url_matches = re.findall(r'http://[a-zA-Z0-9./]+', text)  
print("URL:", url_matches)  # 输出: URL: ['http://example.com/abc']  # 示例匹配以abc结束的字符串  
if re.search(r'abc\.', text):  print("字符串中包含以'abc.'结尾的部分")

常用正则表达式函数

在Python中,正则表达式相关的函数主要定义在 re 模块中。以下是一些常用的正则表达式函数及示例:

1. re.match()
  • 描述:从字符串的开始位置匹配一个模式。
  • 示例
import re  result = re.match(r'Hello', 'Hello, world!')  
if result:  print("匹配成功:", result.group())  # 输出: 匹配成功: Hello
2. re.search()
  • 描述:在整个字符串中搜索第一个匹配。
  • 示例
result = re.search(r'world', 'Hello, world!')  
if result:  print("匹配成功:", result.group())  # 输出: 匹配成功: world
3. re.findall()
  • 描述:返回字符串中所有与模式匹配的非重叠部分。
  • 示例
result = re.findall(r'\d+', 'There are 42 apples and 365 oranges.')  
print("匹配结果:", result)  # 输出: 匹配结果: ['42', '365']
4. re.finditer()
  • 描述:返回一个匹配对象的迭代器。
  • 示例
for match in re.finditer(r'\d+', 'There are 42 apples and 365 oranges.'):  print("匹配结果:", match.group())  # 输出: 42, 365
5. re.sub()
  • 描述:替换字符串中所有匹配的部分。
  • 示例
result = re.sub(r'apples', 'bananas', 'There are 42 apples and 365 oranges.')  
print("替换结果:", result)  # 输出: 替换结果: There are 42 bananas and 365 oranges.
6. re.split()
  • 描述:根据模式分割字符串。
  • 示例
result = re.split(r'[,\s;.]', 'one, two; three.four five')  
print("分割结果:", result)  # 输出: ['one', 'two', 'three', 'four', 'five']
7. re.compile()
  • 描述:将正则表达式编译为对象以提高后续匹配效率。
  • 示例
pattern = re.compile(r'\d+')  
result = pattern.findall('There are 42 apples and 365 oranges.')  
print("匹配结果:", result)  # 输出: 匹配结果: ['42', '365']
8. re.fullmatch()
  • 描述:检查整个字符串是否与模式完全匹配。
  • 示例
result = re.fullmatch(r'\d+', '1234')  
if result:  print("完全匹配成功:", result.group())  # 输出: 完全匹配成功: 1234
9. re.escape()
text = "1 + 2 = 3"  
escaped_text = re.escape(text)  
print("转义结果:", escaped_text)  # 输出: 转义结果: 1\ +\ 2\ =\ 3

http://www.ppmy.cn/ops/129661.html

相关文章

FreeRTOS 数据传输方法(环形buffer,队列的本质)队列实验—多设备玩游戏

数据传输方法 环形buffer 环形buffer的本质就是一个循环队列,但是有一些不同 空:当头指针和尾指针相等时,表示缓冲区为空。满:当尾指针的下一个位置等于头指针时,表示缓冲区已满(在环形结构中&#xff0c…

【界面改版】JimuReport 积木报表 v1.9.0 版本发布,填报优化和大屏能力

项目介绍 积木报表JimuReport,是一款免费的数据可视化报表,含报表、仪表盘和大屏设计,像搭建积木一样完全在线设计!功能涵盖:数据报表、打印设计、图表报表、门户设计、大屏设计等! Web版报表设计器&#x…

怎么理解ES6 Proxy

Proxy 可以理解成,在目标对象之前架设一层 “拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy 这个词的原意是代理,用在这里表示由它来 “代理…

Stream 的使用和基本原理

(2023年3月公司内部培训) Stream 的定义 Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。 对流的操作 Stream可以由数组或集合创建&am…

【Hive复杂数据类型和函数】全网总结最全的Hive函数

文章目录 一、复杂数据类型的建表语句1、array2、map3、struct 二、Hive函数1、炸裂函数explode(行转列)2、日期函数3、字符串函数4、类型转换函数5、其他函数6、窗口函数7、序列函数8、排名函数9、自定义函数 一、复杂数据类型的建表语句 1、array cr…

聊聊Web3D 发展趋势

随着 Web 技术的不断演进,Web3D 正逐渐成为各行业数字化的重要方向。Web3D 是指在网页中展示 3D 内容的技术集合。近年来,由于 WebGL、WebGPU 等技术的发展,3D 内容已经能够直接在浏览器中渲染,为用户提供更加沉浸、互动的体验。以…

【AIGC】2024-arXiv-Lumiere:视频生成的时空扩散模型

2024-arXiv-Lumiere: A Space-Time Diffusion Model for Video Generation Lumiere:视频生成的时空扩散模型摘要1. 引言2. 相关工作3. Lumiere3.1 时空 U-Net (STUnet)3.2 空间超分辨率的多重扩散 4. 应用4.1 风格化生成4.2 条件生成 5. 评估和比较5.1 定性评估5.2 …

力扣周赛Q1.出现在屏幕上字符串序列

给你一个字符串 target。 Alice 将会使用一种特殊的键盘在她的电脑上输入 target,这个键盘 只有两个 按键: 按键 1:在屏幕上的字符串后追加字符 a。 按键 2:将屏幕上字符串的 最后一个 字符更改为英文字母表中的 下一个 字符。例…