【Python】正则表达式

在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

相关推荐
木卫二号Coding1 分钟前
第七十二篇-V100-32G+WebUI+Flux.1-Schnell+Lora+文生图
开发语言·人工智能·python
墨笔之风1 分钟前
基于python 实现的小游戏
开发语言·python·pygame
多米Domi0112 分钟前
0x3f 第24天 黑马web (安了半天程序 )hot100普通数组
数据结构·python·算法·leetcode
BoBoZz193 分钟前
AnatomicalOrientation 3D人体模型及三个人体标准解剖学平面展示
python·vtk·图形渲染·图形处理
love530love4 分钟前
EPGF 新手教程 11在 PyCharm(中文版 GUI)中创建 uv 环境,并把 uv 做到“项目自包含”(工具本地化为必做环节)
ide·人工智能·python·pycharm·conda·uv·epgf
jackylzh5 分钟前
cmd或其它终端的dos命令 & events.out.tfevents文件怎么打开
python
gis_rc5 分钟前
python下shp转3dtiles
python·3d·cesium·3dtiles·数字孪生模型
廖圣平5 分钟前
直播间福袋脚本,研究json格式【一】
python
Lkygo7 分钟前
ragflow 构建本地知识库指南
人工智能·python·语言模型
TTGGGFF2 小时前
Supertonic 部署与使用全流程保姆级指南(附已部署镜像)
开发语言·python