您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Python

python 编程:正则表达式

时间:2022-02-25 10:46:35  来源:  作者:就是七七-

(1) 正则表达式

【是什么】:特殊的序列。检测字符串是否与序列匹配。

【有什么作用】:实现快速检索文本,或实现替换文本的操作。

 

实战:查看字符串是否包含Python/ target=_blank class=infotextkey>Python

  • findal查找全部
  • re.findall(需要匹配的内容, 查找的字符串)
a = "C|JAVA|C#|python|php|JS"
# 方法一
print(a.index("python"))
# 方法二
import re
r = re.findall("python", a)
if len(r) != 0:
    print("字符串中包含python")

输出:
10
字符串中包含python

 

(2) 元字符与普通字符

实战:在字符串中把所有的数字提取出来

  • ‘python’ 是普通字符
  • ‘d’ 是元字符,表示数字:0-9 ,代表一定的意义
  • 'D' 表示‘d’的相反,不是0-9
a = "C123Java321C#455python1321PHP1243JS"

import re
r = re.findall("d", a)
print(r)

r = re.findall("D", a)
print(r)

输出:
['1', '2', '3', '3', '2', '1', '4', '5', '5', '1', '3', '2', '1', '1', '2', '4', '3']
['C', 'J', 'a', 'v', 'a', 'C', '#', 'p', 'y', 't', 'h', 'o', 'n', 'P', 'H', 'P', 'J', 'S']

 

(3) 字符集

实战:查找中间单词是 c,或者 f 的字符集

  • [] 可以抽象字符集,可以抽象c或者f,借助普通字符a和c来进行定界
  • ^ 表示否的意思
              •  - 表示顺序,匹配 a 到 f 的字符
import re
a = "abc,acc,afc,adc,arc"
r1 = re.findall("a[cf]c", a)
r2 = re.findall("a[^cf]c", a)
r3 = re.findall("a[c-f]c", a)
print(r1)
print(r2)
print(r3)

输出:
['acc', 'afc']
['abc', 'adc', 'arc']
['acc', 'afc', 'adc']

 

 (4) 元字符还有什么

w : 表示字母 a-z、A-Z 和数字0-9 和 _

import re
a = "a bc!acc$afc@adc!arc_"
r1 = re.findall("w", a)
r2 = re.findall("W", a)
print(r1)
print(r2)

输出:
['a', 'b', 'c', 'a', 'c', 'c', 'a', 'f', 'c', 'a', 'd', 'c', 'a', 'r', 'c', '_']
[' ', '!', '$', '@', '!']

s : 表示空白字符

import re
a = "a bc!acc$afc@adc!arc_"
r1 = re.findall("s", a)
r2 = re.findall("S", a)
print(r1)
print(r2)

输出:
[' ']
['a', 'b', 'c', '!', 'a', 'c', 'c', '$', 'a', 'f', 'c', '@', 'a', 'd', 'c', '!', 'a', 'r', 'c', '_']

. :表示除换行符之外的所有字符

 

(5) 数量词

实战:把python匹配出来

  • 表示重复的字符集,可以用数字表示
  • {} 里面写的数字,表示重复几次
import re
a = "c123java321C#455python1321php1243JS"
r1 = re.findall("[a-z][a-z][a-z][a-z][a-z][a-z]", a)
r2 = re.findall("[a-z]{6}", a)
print(r1)
print(r2)

输出:
['python']
['python']

 

实战:把 python,java,php 匹配出来

  • {} 里面写的数字,可以写有多少到多少的数字
import re
a = "c123java321C#455python1321php1243JS"
r1 = re.findall("[a-z]{3,6}", a)
print(r1)

输出:
['java', 'python', 'php']

 

(6) 贪婪与非贪婪

默认情况,python是贪婪模式,匹配最多的合适的数量。

? :在数字范围后表示非贪婪

实战: 获取3个字母

import re
a = "c123java321C#455python1321php1243JS"
r1 = re.findall("[a-z]{3,6}?", a)
r2 = re.findall("[a-z]{3}", a)
print(r1)
print(r2)

输出:
['jav', 'pyt', 'hon', 'php']
['jav', 'pyt', 'hon', 'php']

 

(7) 匹配0次1次或者无限多次

*表示匹配前面的字符0次或者多次

+表示匹配前面的字符1次或者多次

?表示匹配前面的字符0次或者1次,可以做去除的操作

import re
a = "pytho0python1pythonn2pythonnn333"
r1 = re.findall("python*", a)
r2 = re.findall("python+", a)
r3 = re.findall("python?", a)
r4 = re.findall("python{1,3}?", a) # 表示非贪婪模式
print(r1)
print(r2)
print(r3)
print(r4)
输出:
['pytho', 'python', 'pythonn', 'pythonnn']
['python', 'pythonn', 'pythonnn']
['pytho', 'python', 'python', 'python']
['python', 'python', 'python']

 

(8) 边界匹配符

实战: 验证位数是否符合

  • ^ 表示从字符串前面开始匹配
  • $ 表示从字符串后面开始匹配
import re
a = "100086"
r1 = re.findall("d{3,5}", a)
r2 = re.findall("^d{3,5}$", a)
print(r1)
print(r2)

输出:
['10008']
[]
import re
a = "100086"
r1 = re.findall("086$", a)
r2 = re.findall("^1000", a)
r3 = re.findall("000$", a)
r4 = re.findall("^000", a)
print(r1)
print(r2)
print(r3)
print(r4)

输出:
['086']
['1000']
[]
[]

 

 (9) 组

判断字符串中是否包含 2个python

  • python{3} : 表示单个n重复3次
  • () :表示组,可以有多个组
  • (python){3}表示一组的单词,重复3次
  • [] 是或者的关系,()是且的关系
import re
a = "pythonpython2pythonpython2nvvpythonpythonn"
r1 = re.findall("(python){2}", a)
r2 =  re.findall("(python){2}(2)", a)
print(r1)
print(r2)

输出:
['python', 'python', 'python']
[('python', '2'), ('python', '2')]

 

(10) 匹配模式参数

flags=re.I : 表示不区分大小写

| : 连接多个模式,且

import re
a = "pc#ythonpython2pythonpython2nvvpythonpythonn"
r1 = re.findall("C#", a,flags=re.I) 
print(r1)

输出:
['c#']

 

 

re.S : 表示 .匹配所有字符,包括换行符

import re
a = "pc#nythonpython2pythonpython2nvvpythonpythonn"
r1 = re.findall("C#.{1}", a, flags=re.I | re.S)
print(r1)

输出:
['c#n']

 

 (11) re.sub正则替换

re.sub("正则匹配规则",“需要换成的字符串”,“查找的字符串”,count=0,flag)

实战 : c# 换成 python

import re
a = "c#phpc#javac#"
r1 = re.sub("c#", "python", a)

输出:
pythonphppythonjavapython

 

count=0 :默认是0,所能被替换的最大选项

import re
a = "c#phpc#javac#"
r1 = re.sub("c#", "python", a,count=1)

输出:
pythonphpc#javac#

 

内置函数 replace 同样可以实现替换

a = "c#phpc#javac#"
print(a.replace("c#", "python"))
输出:
pythonphppythonjavapython

 

(12) 把函数作为参数传递

sub第二个参数,可以接收函数。

根据不同的匹配结果做不同的操作。

import re
def conver(value):
    print(value)
    matched = value.group()
    print(matched)
    return "111" + matched + "111"
a = "c#phpc#javac#"
r1 = re.sub("c#", conver, a)
print(r1)

输出:
<re.Match object; span=(0, 2), match='c#'>
c#
<re.Match object; span=(5, 7), match='c#'>
c#
<re.Match object; span=(11, 13), match='c#'>
c#
111c#111php111c#111java111c#111

 

实战:匹配字符串,数字大于60变成9,否则变成0

import re
def conver(value):
    matched = value.group()
    if int(matched) >= 60:
        return "9"
    else:
        return "0"
a = "ABC123987456DE"
r1 = re.sub("d{2}", conver, a)
print(r1)

输出:
ABC00906DE

 

(13) search与match函数

  • 搜索到了一个,就停止搜索
  • 返回结果都是组
  • match 从字符串首字母开始匹配
  • search 搜索字符串,直到找到满足条件的字符串
a = "1490ABC123987456DE"
r1 = re.match("d", a)  #从字符串首字母开始匹配 
print(r1.group())
r2 = re.search("d", a)  #搜索字符串,直到找到满足条件的字符串
print(r2.group())
print(r2.span())  # 返回位置

输出:
1
1
(0, 1)

 

(14) group分组

实战:获取 A 和 E 中间的字符

0 是默认取值 ,获取完整匹配结果。

a = "A 14956 63E234234E"
r1 = re.match("A(.*)E", a)
print(r1.group(1))   1 是第一个组

r1 = re.match("A(.*)E(.*)E", a)  # 可以有很多个组
print(r1.group(0, 1, 2))

print(r1.groups())  # 把匹配到的内容输出

print(re.findall("A(.*)E(.*)E", a))

输出:
 14956 63E234234
('A 14956 63E234234E', ' 14956 63', '234234')
(' 14956 63', '234234')
[(' 14956 63', '234234')]

 

 (15) JSON

【Json】 是一种轻量级的数据交换格式。

【JSON字符串】:符合json格式的字符串

  • 字符串是json的一种表现形式。

 

【优势】:易于阅读,解析,网络传输效率高。跨语言交换数据。

 

 (16)序列化与反序列化

【反序列化】json.loads()

json字符串需要用双引号。

实战:json字符串转换python的字典

import json
j_str = '{"name":"CiCi","age":18}'
print(type(json.loads(j_str)))

输出:
<class 'dict'>

json字符串的 true 和 false是小写开头的。

json字符串的 null 是 None。

import json

j_str = '[{"name":"CiCi","flag":true},{"name":"CiCi","flag":false}]' 
print(json.loads(j_str))

输出:[{'name': 'CiCi', 'flag': True}, {'name': 'CiCi', 'flag': False}]

 

【序列化】json.dumps()

import json
dict_p = {"name": "CiCi", "flag": True}
print(json.dumps(dict_p))

输出:{"name": "CiCi", "flag": true}


Tags:python 编程   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Python 编程的十大特性,你都了解吗!
当你犹豫是否要开始 Python 学习之前,可以先详尽了解一下这门编程语言。软件开发者 Guido Van Rossum 于 1991 年创建了 Python,旨在使程序员的工作更加简单。Python 是目前全...【详细内容】
2023-11-04  Search: python 编程  点击:(217)  评论:(0)  加入收藏
python 编程:正则表达式
(1) 正则表达式【是什么】:特殊的序列。检测字符串是否与序列匹配。【有什么作用】:实现快速检索文本,或实现替换文本的操作。 实战:查看字符串是否包含python findal查找全部 r...【详细内容】
2022-02-25  Search: python 编程  点击:(444)  评论:(0)  加入收藏
▌简易百科推荐
一篇文章教会你使用Python中三种简单的函数
所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。一、函数简介所谓函数,就是指:把某些特定功能的代码组成为一个整体,这个整体就叫做函数。二、函数定义...【详细内容】
2024-04-11  Go语言进阶学习  微信公众号  Tags:Python   点击:(7)  评论:(0)  加入收藏
一篇文章带你了解Python的分布式进程接口
在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上。一、前言在Thread和Process中,应当优...【详细内容】
2024-04-11  Go语言进阶学习    Tags:Python   点击:(6)  评论:(0)  加入收藏
Python 可视化:Plotly 库使用基础
当使用 Plotly 进行数据可视化时,我们可以通过以下示例展示多种绘图方法,每个示例都会有详细的注释和说明。1.创建折线图import plotly.graph_objects as go# 示例1: 创建简单...【详细内容】
2024-04-01  Python技术    Tags:Python   点击:(10)  评论:(0)  加入收藏
Python 办公神器:教你使用 Python 批量制作 PPT
介绍本文将介绍如何使用openpyxl和pptx库来批量制作PPT奖状。本文假设你已经安装了python和这两个库。本文的场景是:一名基层人员,要给一次比赛活动获奖的500名选手制作奖状,并...【详细内容】
2024-03-26  Python技术  微信公众号  Tags:Python   点击:(21)  评论:(0)  加入收藏
Python实现工厂模式、抽象工厂,单例模式
工厂模式是一种常见的设计模式,它可以帮助我们创建对象的过程更加灵活和可扩展。在Python中,我们可以使用函数和类来实现工厂模式。一、Python中实现工厂模式工厂模式是一种常...【详细内容】
2024-03-07  Python都知道  微信公众号  Tags:Python   点击:(35)  评论:(0)  加入收藏
不可不学的Python技巧:字典推导式使用全攻略
Python的字典推导式是一种优雅而强大的工具,用于创建字典(dict)。这种方法不仅代码更加简洁,而且执行效率高。无论你是Python新手还是有经验的开发者,掌握字典推导式都将是你技能...【详细内容】
2024-02-22  子午Python  微信公众号  Tags:Python技巧   点击:(40)  评论:(0)  加入收藏
如何进行Python代码的代码重构和优化?
Python是一种高级编程语言,它具有简洁、易于理解和易于维护的特点。然而,代码重构和优化对于保持代码质量和性能至关重要。什么是代码重构?代码重构是指在不改变代码外部行为的...【详细内容】
2024-02-22  编程技术汇    Tags:Python代码   点击:(42)  评论:(0)  加入收藏
Python开发者必备的八个PyCharm插件
在编写代码的过程中,括号几乎无处不在,以至于有时我们会拼命辨别哪个闭合括号与哪个开头的括号相匹配。这款插件能帮助解决这个众所周知的问题。前言在PyCharm中浏览插件列表...【详细内容】
2024-01-26  Python学研大本营  微信公众号  Tags:PyCharm插件   点击:(91)  评论:(0)  加入收藏
Python的Graphlib库,再也不用手敲图结构了
Python中的graphlib库是一个功能强大且易于使用的工具。graphlib提供了许多功能,可以帮助您创建、操作和分析图形对象。本文将介绍graphlib库的主要用法,并提供一些示例代码和...【详细内容】
2024-01-26  科学随想录  微信公众号  Tags:Graphlib库   点击:(90)  评论:(0)  加入收藏
Python分布式爬虫打造搜索引擎
简单分布式爬虫结构主从模式是指由一台主机作为控制节点负责所有运行网络爬虫的主机进行管理,爬虫只需要从控制节点那里接收任务,并把新生成任务提交给控制节点就可以了,在这个...【详细内容】
2024-01-25  大雷家吃饭    Tags:Python   点击:(61)  评论:(0)  加入收藏
站内最新
站内热门
站内头条