zxpnet网站 zxpnet网站
首页
前端
后端服务器
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

zxpnet

一个爱学习的java开发攻城狮
首页
前端
后端服务器
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • python基础

    • python3基础
    • python爬虫开发
    • python web开发
    • wxpy微信开发
    • 尹成python
    • python常见库
    • python金融开发
    • python文件操作
    • python正则表达式
      • 概述
      • 基本语法
        • 元字符
        • 转义
        • 重复
        • 或|
        • 捕获
        • 断言
        • 贪婪和非贪婪
        • 引擎选项
      • Re正则
        • 编译
        • 单次匹配
        • 全文搜索
        • 匹配替换
        • 分组
        • 分割
    • python面向对象
    • python模块化
    • python线程与并发
    • python数据库
    • python整合redis
  • python爬虫

  • python库

  • 树莓派
  • Arduino
  • STM32
  • kali linux
  • python培训班
  • python
  • python基础
shollin
2023-02-24
目录

python正则表达式

# 概述

正则表达式(Regular Expression 简写regex)是一种字符串匹配的模式(pattern),更像是一种逻辑公式。

python中re模块提供了正则表达式的功能,常用的有四个方法(match、search、findall)都可以用于匹配字符串

# 基本语法

# 元字符

image-20230224140142905

模式 描述
^ 匹配字符串的开头
$ 匹配字符串的末尾。
. 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字符。
[...] 用来表示一组字符,单独列出:[amk] 匹配 'a','m'或'k',只匹配一个,匹配多次,或关系,
[^...] 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re* 匹配0个或多个的表达式。
re+ 匹配1个或多个的表达式。
re? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式
re{ n} 精确匹配 n 个前面表达式。例如, o{2} 不能匹配 "Bob" 中的 "o",但是能匹配 "food" 中的两个 o。
re{ n,} 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。"o{1,}" 等价于 "o+"。"o{0,}" 则等价于 "o*"。
re{ n, m} 匹配 n 到 m 次由前面的正则表达式定义的片段,贪婪方式
a| b 匹配a或b
(re) 对正则表达式分组并记住匹配的文本
(?imx) 正则表达式包含三种可选标志:i, m, 或 x 。只影响括号中的区域。
(?-imx) 正则表达式关闭 i, m, 或 x 可选标志。只影响括号中的区域。
(?: re) 类似 (...), 但是不表示一个组
(?imx: re) 在括号中使用i, m, 或 x 可选标志
(?-imx: re) 在括号中不使用i, m, 或 x 可选标志
(?#...) 注释.
(?= re) 前向肯定界定符。如果所含正则表达式,以 ... 表示,在当前位置成功匹配时成功,否则失败。但一旦所含表达式已经尝试,匹配引擎根本没有提高;模式的剩余部分还要尝试界定符的右边。
(?! re) 前向否定界定符。与肯定界定符相反;当所含表达式不能在字符串当前位置匹配时成功
(?> re) 匹配的独立模式,省去回溯。
\w 匹配字母数字及下划线,中文 [a-zA-Z0-9_]
\W 匹配非字母数字及下划线
\s 匹配任意空白字符和换行,等价于 [ \t\n\r\f]。
\S 匹配任意非空字符
\d 匹配任意数字,等价于 [0-9].
\D 匹配任意非数字
\A 匹配字符串开始
\Z 匹配字符串结束,如果是存在换行,只匹配到换行前的结束字符串。
\z 匹配字符串结束
\G 匹配最后匹配完成的位置。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B 匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等. 匹配一个换行符。匹配一个制表符。等
\1...\9 匹配第n个分组的内容。
\10 匹配第n个分组的内容,如果它经匹配。否则指的是八进制字符码的表达式。

image-20230224103224259

# 转义

凡是在正则表达式中有特殊意义的符号,如果想使用它的本意,请使用转义反斜杠自身,得使用
\r、\n还是转义后代表回车、换行

# 重复

+ ?* {n,m} 至少一个; 0到1个;尽可能多、至多,最少为0; n到m个

image-20230224114651358

# 或|

image-20230224172149466

()括号会产生分组,如果想不分组,加上?:分组号从1开始

(f|w)ood 会产生两个分组f和w , (?:f|w)ood 不会产生分组

# 捕获

image-20230224154408706

# 断言

image-20230224154604725

image-20230224172234931

# 贪婪和非贪婪

默认是贪婪模式,也就是说尽量多匹配更长的字符串。

非贪婪模式很简单,在重复的符号后面加上问号?,就尽量地少匹配了

image-20230225164208434

# 引擎选项

默认模式:将整个测试字符串看做一个一行的大字符串,.不能代表\n ^$行首行尾

单行模式:将整个测试字符串看做一个一行的大字符串,只影响.点号行为,.可以匹配\n ^$行首行尾

多行模式:可以把一行大字符串用\n分割成多行,^指的是行首,$行尾

注意字符串中看不见的换行符,\r\n会影响e$的测试,e$只能匹配e\n

image-20230225170417005

参考:

Python 正则表达式详解 (opens new window)

regextester下载 (opens new window)

# Re正则

# 编译

image-20230310171556701

# 单次匹配

match 是单次匹配,并不做全文搜索,而且要求必须是从头匹配 索引0。找不到返回None

search 是单次匹配,并不做全文搜索,但是从index为0开始向后找到一次,找不到返回None

fullmatch 是单次匹配,要求指定的区间全部匹配

image-20230310171622431

# 全文搜索

findall 返回列表,返回匹配的字符串

finditer 返回一个迭代器,每一个元素都是match实例 callable_iterator

image-20230310171736628

# 匹配替换

sub 返回替换的结果,模式替换,可以指定至多替换次数

subn 返回元组(替换的结果,替换的次数),模式替换,可以指定至多替换次数

image-20230310171750291

# 分组

image-20230310171820172

import re

s="""bottle\nbag\n\box"""
reg = re.compile("(a)(?P<g1>\w+)", re.S); # 编译

#m = reg.match(s); # 相当于re.match("\w+",s, re.S)
m = reg.search(s);
if m:
    print(m); #
    print(m.groups()); #('a', 'g')
    print(m.group()); #ag  组 组号 从1开始
    print(m.group(0)); #ag 相当于m.group(), 显示的是match值
    print(m.group(1), m.group(2)); #a  组号从1开始,因此为a
    print(m.groupdict()); # 组名字典 {'g1': 'g'}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 分割

split 分割,指定分割符, 返回列表

image-20230310171808513

python文件操作
python面向对象

← python文件操作 python面向对象→

最近更新
01
国际象棋
09-15
02
成语
09-15
03
自然拼读
09-15
更多文章>
Theme by Vdoing | Copyright © 2019-2023 zxpnet | 粤ICP备14079330号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式