python正则表达式最详解

目录
  • 一、正则表达式–元字符
    • 1. 数量词
    • 2. 字符匹配
    • 3. 边界匹配
    • 4. 组
    • 5. 匹配模式参数
  • 二、方法
    • re.findall
    • re.match
    • group匹配对象
    • re.search
    • re.compile
  • 三、检索和替换
    • re.sub 替换字符串
  • 总结

一、正则表达式–元字符

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)

总结

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

(0)

相关推荐

  • 详解Python 正则表达式模块

    由于最近需要使用爬虫爬取数据进行测试,所以开始了爬虫的填坑之旅,那么首先就是先系统的学习下关于正则相关的知识啦.所以将下面正则方面的知识点做了个整理.语言环境为Python.主要讲解下Python的Re模块. 下面的语法我就主要列出一部分,剩下的在python官网直接查阅即可: docs.python.org/3/library/r- 一.基础语法总结 1.1.匹配单个字符 a . \d \D \w \W \s \S [...] [^...] 匹配单个字符(.) 规则:匹配除换行之外的任意字符

  • Python正则表达式的应用详解

    目录 正则表达式的定义 Python对正则表达式的支持 示例 例1:验证输入的用户名是否有效,用户名由长度为6到20的字母.数字.下划线组成 例2:从字符串中找到与正则表达式匹配的部分 例3:从网页上获取新闻的标题和链接 例4:不良内容过滤 例5:用正则表达式拆分字符串 总结 正则表达式的定义 在编写处理字符串的程时,经常会遇到在一段文本中查找符合某些规则的字符串的需求,正则表达式就是用于描述这些规则的工具,换句话说,我们可以使用正则表达式来定义字符串的匹配模式,即如何检查一个字符串是否有跟某种

  • 正则表达式+Python re模块详解

    正则表达式(Regluar Expressions)又称规则表达式,在代码中常简写为REs,regexes或regexp(regex patterns).它本质上是一个小巧的.高度专用的编程语言. 通过正则表达式可以对指定的文本实现 匹配测试.内容查找.内容替换.字符串分割 等功能. re模块介绍 Python中的re模块提供了一个正则表达式引擎接口,它允许我们将正则表达式编译成模式对象,然后通过这些模式对象执行模式匹配搜索和字符串分割.子串替换等操作.re模块为这些操作分别提供了模块级别的函数

  • python正则表达式查找和替换内容的实例详解

    1.编写Python正则表达式字符串s. 2.使用re.compile将正则表达式编译成正则对象Patternp. 3.正则对象p调用p.search或p.findall或p.finditer查找内容. 4.正则对象p调用p.sub或p.subn替换内容. 实例 import re s = "正则表达式" p = re.compile(s) # 查找 mf1 = p.search("检测内容") mf2 = p.findall("检测内容") m

  • Python 正则表达式详解

    目录 1.正则表达式是什么 2.1用正则表达式 2.2匹配原理 2.3常用函数 总结 1.正则表达式是什么 很简单就是一种字符串匹配,eg: 比如你在注册账户时我们需要对用户的用户名判断是否合法,这时候就需要对用户输入的检索,或者给你5-11位的数字你确定他是否为qq号. 2.1用正则表达式 import re 2.2匹配原理 import re msg = '董小姐桥边姑娘南方小姐' pattern = re.compile('董小姐') result = pattern.match(msg)

  • python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解

    在pdf转为文本的时候,经常会多出空格,影响数据观感,因此需要去掉文本中多余的空格,而文本中的英文之间的正常空格需要保留,输入输出如下: input:我今天 赚了 10 个亿,老百姓very happy. output:我今天赚了10个亿,老百姓very happy. 代码 def clean_space(text): """" 处理多余的空格 """ match_regex = re.compile(u'[\u4e00-\u9fa5.

  • Python常用的正则表达式处理函数详解

    正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便. 在Python中,我们通过调用re库来使用re模块: import re 正则表达式语法模式和操作符详见:https://www.runoob.com/python/python-reg-expressions.html#flags 下面介绍Python常用的正则表达式处理函数. re.match函数 re.match 函数从字符串的起始位置匹配正则表达式,返回match对象,如果不

  • python正则表达式最详解

    目录 一.正则表达式–元字符 1. 数量词 2. 字符匹配 3. 边界匹配 4. 组 5. 匹配模式参数 二.方法 re.findall re.match group匹配对象 re.search re.compile 三.检索和替换 re.sub 替换字符串 总结 一.正则表达式–元字符 re 模块使 Python 语言拥有全部的正则表达式功能 1. 数量词 # 提取大小写字母混合的单词 import re a = 'Excel 12345Word23456PPT12Lr' r = re.fin

  • Oracle 正则表达式实例详解

    Oracle 正则表达式实例详解 FORM开发中的按行拆分需求:拆分后的行要有规律,并按前后层次排序 需求分析如下: 现有行: 2  ,      2.1  ,     2.2   ,   2.3           3                      2.1.1,    2.1.2  ,    2.1.3 ,    2.2.1  , 2.1.1.1, 2.1.1.2, 对 2 进行拆分得到的 结果应该是 2.4 (2.4 是通过 查看历史记录中以2 开头,有一位小数点,小数点后一位最

  • python 全文检索引擎详解

    python 全文检索引擎详解 最近一直在探索着如何用Python实现像百度那样的关键词检索功能.说起关键词检索,我们会不由自主地联想到正则表达式.正则表达式是所有检索的基础,python中有个re类,是专门用于正则匹配.然而,光光是正则表达式是不能很好实现检索功能的. python有一个whoosh包,是专门用于全文搜索引擎. whoosh在国内使用的比较少,而它的性能还没有sphinx/coreseek成熟,不过不同于前者,这是一个纯python库,对python的爱好者更为方便使用.具体的

  • 一个入门级python爬虫教程详解

    前言 本文目的:根据本人的习惯与理解,用最简洁的表述,介绍爬虫的定义.组成部分.爬取流程,并讲解示例代码. 基础 爬虫的定义:定向抓取互联网内容(大部分为网页).并进行自动化数据处理的程序.主要用于对松散的海量信息进行收集和结构化处理,为数据分析和挖掘提供原材料. 今日t条就是一只巨大的"爬虫". 爬虫由URL库.采集器.解析器组成. 流程 如果待爬取的url库不为空,采集器会自动爬取相关内容,并将结果给到解析器,解析器提取目标内容后进行写入文件或入库等操作. 代码 第一步:写一个采集

  • Linux正则表达式特性详解及BRE与ERE的异同点

    Linux正则表达式(Regular Expression)主要遵从POSIX BRE或者POSIX ERE标准.什么是POSIX呢,POSIX Portable Operating System Interface 可移植操作系统接口ERE是BRE的扩展版本,具体更强的处理能力,并增加了一些元字符(metacharactor). BRE主要的能力集有: 1) 普通字符(Literal text),如a,b,c等 2)非打印字符,包括TAB,回车,换行,回车换行(WINDOWS) 3)任意字符.

  • Python网络编程详解

    1.服务器就是一系列硬件或软件,为一个或多个客户端(服务的用户)提供所需的"服务".它存在唯一目的就是等待客户端的请求,并响应它们(提供服务),然后等待更多请求. 2.客户端/服务器架构既可以应用于计算机硬件,也可以应用于计算机软件. 3.在服务器响应客户端之前,首先会创建一个通信节点,它能够使服务器监听请求. 一.套接字:通信端点 1.套接字 套接字是计算机网络数据结构,它体现了上节中所描述的"通信端点"的概念.在任何类型的通信开始之前,网络应用程序必须创建套接字

  • Python 多线程实例详解

    Python 多线程实例详解 多线程通常是新开一个后台线程去处理比较耗时的操作,Python做后台线程处理也是很简单的,今天从官方文档中找到了一个Demo. 实例代码: import threading, zipfile class AsyncZip(threading.Thread): def __init__(self, infile, outfile): threading.Thread.__init__(self) self.infile = infile self.outfile =

  • Docker 打包python的命令详解

    最近用Python写了一段爬虫程序,为了隔离其运行环境,易于分发,把项目打包成Docker镜像 Dockerfile FROM python:2.7.12-alpine ADD ./src /job CMD ["python", "/job/main.py"] 构建命令 $ docker build -t job . 运行 $ docker run -d --name job job 比较简单 以上所述是小编给大家介绍的Docker 打包python的命令详解,希望

  • java中正则表达式实例详解

    Java中正则表达式运用实例(参看java中正则表达式运用详解): 测试代码 package test; /** * 在String的matches()方法,split()方法中使用正则表达式. * @author fhd001 */ public class RegexTest { public static void main(String[] args) { /* * 普通字符 */ String str1 = "abc45abc345"; String[]arr1 = str1

随机推荐