文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python的正则表达式怎么用

2023-06-25 12:34

关注

这篇文章主要为大家展示了“python的正则表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“python的正则表达式怎么用”这篇文章吧。

一、正则表达式–元字符

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

python的正则表达式怎么用

1. 数量词

# 提取大小写字母混合的单词import rea = '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 rea = 'exce0excell3excel3'r = re.findall('excel*',a)r = re.findall('excel.*',a) # ['excell3excel3']# excel 没有l 有很多l都可以匹配出来print(r)# ['exce', 'excell', 'excel']# 匹配1次或者无限多次 +号,+号前面的字符至少出现1次import rea = 'exce0excell3excel3'r = re.findall('excel+',a)print(r)# ['excell', 'excel']# 匹配0次或1次  ?号,?号经常用来去重复import rea = 'exce0excell3excel3'r = re.findall('excel?',a)print(r)# ['exce', 'excel', 'excel']

2. 字符匹配

python的正则表达式怎么用

line = 'xyz,xcz.xfc.xdz,xaz,xez,xec'r = re.findall('x[de]z', line)# pattern 是x开始,z结束,含d或eprint(r)# ['xdz', 'xez']r = re.findall('x[^de]z', line)# pattern 是x开始,z结束,不是含d或eprint(r)# ['xyz', 'xcz', 'xaz']
# \w 可以提取中文,英文,数字和下划线,不能提取特殊字符import rea = '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 \timport rea = 'Excel 12345Word\n23456_PPT12lr'r = re.findall('\W',a)print(r)# [' ', '\n']

3. 边界匹配

python的正则表达式怎么用

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

4. 组

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

5. 匹配模式参数

python的正则表达式怎么用

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

二、方法

re.findall

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

re.match

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 rea = '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 pythonprint(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'># Noneif 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  reline = "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.sub 替换字符串

re.sub('被替换的','替换成的',a)
# 把FBI替换成BBQimport rea = 'abcFBIabcCIAabc'r = re.sub('FBI','BBQ',a)print(r)# 把FBI替换成BBQ,第4参数写1,证明只替换第一次,默认是0(无限替换)import rea = 'abcFBIabcFBIaFBICIAabc'r = re.sub('FBI','BBQ',a,1)print(r)# abcBBQabcCIAabc# abcBBQabcFBIaFBICIAabc
# 把函数当参数传到sub的列表里,实现把业务交给函数去处理,例如将FBI替换成$FBI$import rea = 'abcFBIabcFBIaFBICIAabc'def 函数名(形参):    分段获取 = 形参.group()           # group()在正则表达式中用于获取分段截获的字符串,获取到FBI    return '$' + 分段获取 + '$'r = re.sub('FBI',函数名,a)print(r)

以上是“python的正则表达式怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯