广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python正则表达式最详解
  • 358
分享到

python正则表达式最详解

2024-04-02 19:04:59 358人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录一、正则表达式–元字符1.数量词2.字符匹配3.边界匹配4.组5.匹配模式参数二、方法re.findallre.matchgroup匹配对象re.searchre.compile

一、正则表达式–元字符

re 模块使 python 语言拥有全部的正则表达式功能

在这里插入图片描述

1. 数量词


# 提取大小写字母混合的单词
import re
a = 'excel 12345Word23456PPT12Lr'
r = re.findall('[a-zA-Z]{3,5}',a)
# 提取字母的数量3个到5个
print(r)
# ['Excel', 'Word', 'PPT']
# 贪婪 与 非贪婪  【Python默认使用贪婪模式】
# 贪婪:'[a-zA-Z]{3,5}'
# 非贪婪:'[a-zA-Z]{3,5}?' 或 '[a-zA-Z]{3}'
# 建议使用后者,不要使用?号,否则你会与下面的?号混淆
# 匹配0次或无限多次 *号,*号前面的字符出现0次或无限次
import re
a = 'exce0excell3excel3'
r = re.findall('excel*',a)
r = re.findall('excel.*',a) # ['excell3excel3']
# excel 没有l 有很多l都可以匹配出来
print(r)
# ['exce', 'excell', 'excel']
# 匹配1次或者无限多次 +号,+号前面的字符至少出现1次
import re
a = 'exce0excell3excel3'
r = re.findall('excel+',a)
print(r)
# ['excell', 'excel']
# 匹配0次或1次  ?号,?号经常用来去重复
import re
a = 'exce0excell3excel3'
r = re.findall('excel?',a)
print(r)
# ['exce', 'excel', 'excel']

2. 字符匹配

在这里插入图片描述


line = 'xyz,xcz.xfc.xdz,xaz,xez,xec'
r = re.findall('x[de]z', line)
# pattern 是x开始,z结束,含d或e
print(r)
# ['xdz', 'xez']
r = re.findall('x[^de]z', line)
# pattern 是x开始,z结束,不是含d或e
print(r)
# ['xyz', 'xcz', 'xaz']

# \w 可以提取中文,英文,数字和下划线,不能提取特殊字符
import re
a = 'Excel 12345Word\n23456_PPT12lr'
r = re.findall('\w',a)
print(r)
# ['E', 'x', 'c', 'e', 'l', '1', '2', '3', '4', '5', 'W', 'o', 'r', 'd', '2', '3', '4', '5', '6', '_', 'P', 'P', 'T', '1', '2', 'l', 'r']
# \W 提取特殊字符,空格 \n \t
import re
a = 'Excel 12345Word\n23456_PPT12lr'
r = re.findall('\W',a)
print(r)
# [' ', '\n']

3. 边界匹配

在这里插入图片描述


# 限制电话号码的位置必需是8-11位才能提取
import re
tel = '13811115888'
r = re.findall('^\d{8,11}$',tel)
print(r)
# ['13811115888']

4. 组


# 将abc打成一个组,{2}指的是重复几次,匹配abcabc
import re
a = 'abcabcabcxyzabcabcxyzabc'
r = re.findall('(abc){2}',a)  # 与
# ['abc', 'abc']
print(r)
r = re.findall('(abc){3}',a)
# ['abc']

5. 匹配模式参数

在这里插入图片描述


# findall第三参数 re.I忽略大小写
import re
a = 'abcFBIabcCIAabc'
r = re.findall('fbi',a,re.I)
print(r)
# ['FBI']
# 多个模式之间用 | 连接在一起
import re
a = 'abcFBI\nabcCIAabc'
r = re.findall('fbi.{1}',a,re.I | re.S)
# 匹配fbi然后匹配任意一个字符包括\n
print(r)
# ['FBI\n']

二、方法

re.findall

  • 匹配出字符串中所有 与制定值相关的值
  • 以列表的形式返回
  • 未匹配则返回空列表

import re
re.findall(pattern, string, flags=0)
pattern.findall(string[ , pos[ , endpos]])

import re
line = "111aaabbb222小呼噜奥利奥"
r = re.findall('[0-9]',line)
print(r)
# ['1', '1', '1', '2', '2', '2']

re.match

  • re.match 尝试从字符串的起始位置匹配一个模式
  • 如果不是起始位置匹配成功的话,match()就返回none。

re.match(pattern, string, flags=0)
# (标准,要匹配的,标志位)

print(re.match('www','www.xxxx.com'))
print(re.match('www','www.xxxx.com').span())
print(re.match('com','www.xxxx.com'))

<re.Match object; span=(0, 3), match='www'>
(0, 3)
None

group匹配对象


import re
a = 'life is short,i use python,i love python'
r = re.search('life(.*)python(.*)python',a)
print(r.group(0))       # 完整正则匹配 ,life is short,i use python,i love python
print(r.group(1))       # 第1个分组之间的取值 is short,i use 
print(r.group(2))       # 第2个分组之间的取值 ,i love 
print(r.group(0,1,2)) # 以元组形式返回3个结果取值 ('life is short,i use python,i love python', ' is short,i use ', ',i love ')
print(r.groups())       # 返回就是group(1)和group(2) (' is short,i use ', ',i love ')

import re
# .*        表示任意匹配除换行符(\n、\r)之外的任何单个或多个字符
# (.*?)     表示"非贪婪"模式,只保存第一个匹配到的子串
# re.M      多行匹配,影响 ^ 和 $
# re.I      使匹配对大小写不敏感
line = "Cats are smarter than dogs"
matchObj1 = re.match(r'(.*) are (.*?) .*', line,  re.M|re.I)
matchObj2 = re.match(r'(.*) smarter (.*?) .*', line,  re.M|re.I)
matchObj3 = re.match(r'(.*) than (.*)', line,  re.M|re.I)
print(matchObj1)
print(matchObj2)
print(matchObj3)
# <re.Match object; span=(0, 26), match='Cats are smarter than dogs'>
# <re.Match object; span=(0, 26), match='Cats are smarter than dogs'>
# None
if matchObj1:
   print ("matchObj1.group() : ", matchObj1.group())
   print ("matchObj1.group(1) : ", matchObj1.group(1))
   print ("matchObj1.group(2) : ", matchObj1.group(2))
else:
   print ("No match!!")
if matchObj2:
   print ("matchObj2.group() : ", matchObj2.group())
   print ("matchObj2.group(1) : ", matchObj2.group(1))
   print ("matchObj2.group(2) : ", matchObj2.group(2))
else:
   print ("No match!!")
if matchObj3:
   print ("matchObj3.group() : ", matchObj3.group())
   print ("matchObj3.group(1) : ", matchObj3.group(1))
   print ("matchObj3.group(2) : ", matchObj3.group(2))
else:
   print ("No match!!")
# matchObj1.group() :  Cats are smarter than dogs
# matchObj1.group(1) :  Cats
# matchObj1.group(2) :  smarter
# matchObj2.group() :  Cats are smarter than dogs
# matchObj2.group(1) :  Cats are
# matchObj2.group(2) :  than
# matchObj3.group() :  Cats are smarter than dogs
# matchObj3.group(1) :  Cats are smarter
# matchObj3.group(2) :  dogs

import re
# 点 是匹配单个字符
# 星是前面的东西出现0次或无数次
# 点星就是任意字符出现0次或无数次
str = "a b a b"
matchObj1 = re.match(r'a(.*)b', str,  re.M|re.I)
matchObj2 = re.match(r'a(.*?)b', str,  re.M|re.I)
print("matchObj1.group() : ", matchObj1.group())
print("matchObj2.group() : ", matchObj2.group())
# matchObj1.group() :  a b a b
# matchObj2.group() :  a b

re.search

扫描整个字符串并返回第一个成功的匹配。


re.search(pattern, string, flags=0)

import  re
line = "cats are smarter than dogs"
matchObj = re.match(r'dogs',line,re.M|re.I)
matchObj1= re.search(r'dogs',line,re.M|re.I)
matchObj2= re.match(r'(.*) dogs',line,re.M|re.I)
if matchObj:
   print ("match --> matchObj.group() : ", matchObj.group())
else:
   print ("No match!!")
if matchObj1:
   print ("match --> matchObj1.group() : ", matchObj1.group())
else:
   print ("No match!!")
if matchObj2:
   print ("match --> matchObj2.group() : ", matchObj2.group())
else:
   print ("No match!!")
# No match!!
# match --> matchObj1.group() :  dogs
# match --> matchObj2.group() :  cats are smarter than dogs

re.compile

  • re.compile是将正则表达式转换为模式对象
  • 这样可以更有效率匹配。使用compile转换一次之后,以后每次使用模式时就不用进行转换

三、检索和替换

re.sub 替换字符串


re.sub('被替换的','替换成的',a)

# 把FBI替换成BBQ
import re
a = 'abcFBIabcCIAabc'
r = re.sub('FBI','BBQ',a)
print(r)
# 把FBI替换成BBQ,第4参数写1,证明只替换第一次,默认是0(无限替换)
import re
a = 'abcFBIabcFBIaFBICIAabc'
r = re.sub('FBI','BBQ',a,1)
print(r)
# abcBBQabcCIAabc
# abcBBQabcFBIaFBICIAabc

# 把函数当参数传到sub的列表里,实现把业务交给函数去处理,例如将FBI替换成$FBI$
import re
a = 'abcFBIabcFBIaFBICIAabc'
def 函数名(形参):
    分段获取 = 形参.group()           # group()在正则表达式中用于获取分段截获的字符串,获取到FBI
    return '$' + 分段获取 + '$'
r = re.sub('FBI',函数名,a)
print(r)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: python正则表达式最详解

本文链接: https://www.lsjlt.com/news/156372.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python正则表达式最详解
    目录一、正则表达式–元字符1.数量词2.字符匹配3.边界匹配4.组5.匹配模式参数二、方法re.findallre.matchgroup匹配对象re.searchre.compile...
    99+
    2022-11-12
  • Python 正则表达式详解
    目录1.正则表达式是什么2.1用正则表达式2.2匹配原理2.3常用函数总结1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法...
    99+
    2022-11-12
  • Python中正则表达式详解
    基础篇 正则表达式在python中运用的非常多,因为他可以进行任意的匹配,可以匹配我们想要提取的信息。当我们接触正则的时候你就会知道正则的强大。正则有一个库re 在一些工程中我们会经常调用正则的库来做与匹配...
    99+
    2022-06-04
    详解 正则表达式 Python
  • Python中使用正则表达式及正则表达式匹配规则详解
    目录1 导库2 使用模板3 说明4 示例5 正则表达式匹配规则1 导库 import re 2 使用模板 re_pattern = re.compile(pattern, flags...
    99+
    2023-03-22
    Python正则表达式匹配规则 Python正则表达式
  • JavaScript 正则表达式详解
    目录1. 正则表达式创建2. 使用模式2.1 使用简单模式2.2 使用特殊字符3. 应用3.1 切分字符串3.2 分组3.3 贪婪匹配3.4 正则表达式标志3.5 test() 方法...
    99+
    2022-11-12
  • Ruby正则表达式详解
    目录Ruby 正则表达式语法实例正则表达式修饰符正则表达式模式 正则表达式实例字符 字符类 特殊字符类 重复 非贪婪重复 ...
    99+
    2023-05-15
    Ruby 正则表达式 Ruby 正则表达式详解 Ruby 正则表达式实例
  • Java 正则表达式详解
    正则表达式(Regular Expression),又称为正规表达式、规则表达式、常规表示法等,是一种用来匹配、查找和替换字符串的工...
    99+
    2023-08-16
    Java
  • Python正则表达式re.compile()和re.findall()详解
    目录前言网页中的代码:提取的方法:re.findall中参数re.S的意义:参考:总结前言 在使用爬虫提取网页中的部分信息时,采用到了re.compile()与re.findall(...
    99+
    2022-11-11
  • Python正则表达式re.sub()用法详解
    目录1.匹配单个数字或字母2.匹配多个数字或字母3.匹配其他总结 源代码、参数及其意义: def sub(pattern, repl, string, count=0, f...
    99+
    2022-11-11
  • Python正则表达式re.search()用法详解
    re.search():匹配整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None  pattern: 匹配的规则, string : 要匹配的内容, flag...
    99+
    2022-11-11
  • 超详细讲解python正则表达式
    目录正则表达式1.1 正则表达式字符串1.1.1 元字符1.1.2 字符转义1.1.3 开始与结束字符1.2 字符类1.2.1 定义字符类1.2.2 字符串取反1.2.3 区间1.2...
    99+
    2022-11-12
  • Python正则表达式的应用详解
    目录正则表达式的定义Python对正则表达式的支持示例例1:验证输入的用户名是否有效,用户名由长度为6到20的字母、数字、下划线组成例2:从字符串中找到与正则表达式匹配的部分例3:从...
    99+
    2022-11-12
  • 理解python正则表达式
    在python中,对正则表达式的支持是通过re模块来支持的。使用re的步骤是先把表达式字符串编译成pattern实例,然后在使用pattern去匹配文本获取结果。 其实也有另外一种方式,就是直接使用re模块...
    99+
    2022-06-04
    正则表达式 python
  • Python3的正则表达式详解
    目录1.简介2.切分字符串3.分组4.贪婪匹配5.编译总结1.简介 # 正则表达式:用来匹配字符串的武器; # 设计思想:用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符...
    99+
    2022-11-13
  • 正则表达式用法详解
    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验证。那什么是正则表达式呢? 正则表达式(Regul...
    99+
    2022-11-12
  • Python 正则表达式详解(建议收藏!)
    目录 match 匹配字符串 单字符匹配 . 匹配任意一个字符 \d 匹配数字 \D 匹配非数字 \s 匹配特殊字符,如空白,空格,tab等 \S 匹配非空白 \w 匹配单词、字符,如大小写字母,数字,_ 下划线 \W 匹配非单词字符 [ ...
    99+
    2023-09-01
    正则表达式 python
  • python模块之re正则表达式详解
    一、简单介绍 正则表达式是一种小型的、高度专业化的编程语言,并不是python中特有的,是许多编程语言中基础而又重要的一部分。在python中,主要通过re模块来实现。 正则表达式模式被编译成一系列的字节码...
    99+
    2022-06-04
    详解 模块 正则表达式
  • python 正则表达式
    正则表达式的作用:用来匹配字符串 一、字符串方法 字符串提供的方法是完全匹配,不能进行模糊匹配 s = 'hello world' # 字符串提供的方法是完全匹配,不能进行模糊匹配 print(s.find('ll')) # 2 ...
    99+
    2023-01-30
    正则表达式 python
  • python正则表达式
    笔记:一:简介 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。 主要介绍Python中常用的正则表达式处理函数 提高工作效率,完成内置函数无法完成的任务! 搜索常用正则表达式!-...
    99+
    2023-01-30
    正则表达式 python
  • C#正则表达式与HashTable详解
    目录1、正则表达匹配规则转义字符限定字符分组()2、C#中正则表达式构建与匹配正则表达式的替换正则表达式拆分HashTable概述及元素添加Hashtable遍历Hashtable元...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作