一文秒懂python正则表达式常用函数_正则表达式

来源:脚本之家  责任编辑:小易  

匹配两种情况的Python正则表达式 top|123我给你一个Python3语言的例子,你看看吧.import res="topofhill1234567toptower123regex="top|123print(re.findall(regex,s))www.zgxue.com防采集请勿采集本网。

导读: 正则表达式是处理字符串类型的"核武器",不仅速度快,而且功能强大。本文不过多展开正则表达式相关语法,仅简要 介绍 python中正则表达式常用函数及其使用方 法,以作快速查询浏览。

f*是用来匹配多个f,默认是匹配尽可能多的,但是后接?就变成匹配尽可能少的。所以第一个啥都没匹配。第二个可以匹配到。

 

01 Re概览

px=r'<tr>.+?(.+?href=\"<%=.+?%>.*?\\?filename=(\"(.+?.+?\\)%>\">.+?.+?(.+?.+?' rex=re.compile(px,re.S|re.M) mth=rex.findall(txt) for l in mth: print l[0].decode('utf-8'),l[1].

Re模块是python的内置模块,提供了正则表达式在python中的所有用法,默认安装位置在python根目录下的Lib文件夹(如 ..\Python\Python37\Lib)。主要提供了3大类字符串操作方法: 字符查找/匹配 字符替换 字符分割

[A-Za-z]\\w+:由开头的1个大写或者小写的字母加上至少1个 字符来匹配 比如 Aaa,Aa 4xZ匹配不到,xZ4可以匹配。

由于是面向字符串类型的模块,就不得不提到字符串编码类型。re模块中,模式串和搜索串既可以是 Unicode 字符串 (常用str类型) ,也可以是8位字节串 (bytes,2位16进制数字,例如\xe5) , 但要求二者必须是同类型字符串。

02 字符串查找/匹配

这个问题的确比较纠结首先明确一点 表示匹配前面的表达式0个或一次,例子:go?匹配go为0或者1次 呵呵 就是冒号的意思,所以你懂的,没匹配到 写那么多,如果不明白,可以再问我哈 万请采纳

预编译:compile

a='<gml:bbbb>-69</gml:aaaaa>' r=re.findall('([\\s\\S]*?',a) print(r)

在介绍查找和匹配函数前,首先需要知道re的compile函数,该函数可以将一个模式串编译成正则表达式类型,以便后续快速匹配和复用

import repattern = re.compile(r'[a-z]{2,5}')type(pattern) #re.Pattern

此例创建了一个正则表达式式对象 (re.pattern) ,命名为pattern,用于匹配2-5位小写字母的模式串。后续在使用其他正则表达式函数时,即可使用pattern进行方法调用。

匹配:match

match函数用于从文本串的起始位置开始匹配,若匹配成功,则返回相应的匹配对象,此时可调用group()方法返回匹配结果,也可用span()方法返回匹配起止下标区间;否则返回None

import repattern = re.compile(r'[a-z]{2,5}')text1 = 'this is a re test'res = pattern.match(text1)print(res) #<re.Match object; span=(0, 4), match='this'>if res: print(res.group()) #this print(res.span()) #(0, 4)text2 = '是的, this is a re test'print(pattern.match(text2))#None

match函数还有一个变形函数fullmatch,当且仅当模式串与文本串刚好全部匹配时,返回一个匹配对象,否则返回None

搜索:search

match只提供了从文本串起始位置匹配的结果,如果想从任意位置匹配,则可调用search方法,与match方法类似,当任意位置匹配成功,则立即返回一个匹配对象,也可调用span()方法获取起止区间、调用group方法获得匹配文本串

import repattern = re.compile(r'\s[a-z]{2}')text1 = 'this is a re test'res = pattern.search(text1)print(res) #<re.Match object; span=(4, 7), match=' is'>if res: print(res.group()) #is print(res.span()) #(4, 7)pattern2 = re.compile(r'\s[a-z]{5}')text2 = '是的,this is a re test'print(pattern2.search(text2))#None

match和search均用于匹配单个结果,唯一区别在于前者是从起始位置开始匹配,而后者从任意位置匹配,匹配成功则返回一个match对象。

全搜索:findall/finditer

几乎是最常用的正则表达式函数,用于寻找所有匹配的结果,例如在爬虫信息提取中,可非常方便地提取所有匹配字段

import repattern = re.compile(r'\s[a-z]{2,5}')text1 = 'this is a re test'res = pattern.findall(text1)print(res) #[' is', ' re', ' test']

findall返回的是一个列表对象类型,当无匹配对象时,返回一个空列表。为了避免因同时返回大量匹配结果占用过多内存,可以调用finditer函数返回一个迭代器类型,其中每个迭代元素是一个match对象,可继续调用group和span方法获取相应结果

import repattern = re.compile(r'\s[a-z]{2,5}')text1 = 'this is a re test'res = pattern.finditer(text1)for r in res: print(r.group())""" is re test"""

当匹配模式串较为简单或者仅需单词调用时,上述所有方法也可直接调用re类函数,而无需事先编译。此时各方法的第一个参数为模式串。

import repattern = re.compile(r'\d{2,5}')text = 'this is re test're.findall('[a-z]+', text) #['this', 'is', 're', 'test']

03 字符串替换/分割

替换:sub/subn

当需要对文本串进行条件替换时,可调用re.sub实现 (当然也可先编译后再用调用实例方法) ,相应参数分别为模式串、替换格式、文本串,还可以通过增加缺省参数限定替换次数和匹配模式。通过在模式串进行分组,可实现字符串的格式化替换(类似字符串的format方法),以实现特定任务。

import retext = 'today is 2020-03-05'print(re.sub('-', '', text)) #'today is 20200305'print(re.sub('-', '', text, 1)) #'today is 202003-05'print(re.sub('(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text)) #'today is 03/05/2020'

re.sub的一个变形方法是re.subn,区别是返回一个2元素的元组,其中第一个元素为替换结果,第二个为替换次数

import retext = 'today is 2020-03-05'print(re.subn('-', '', text)) #('today is 20200305', 2)

分割:split

还可以调用正则表达式实现字符串的特定分割,相当于.split()方法的一个加强版,实现特定模式的分割,返回一个切割后的结果列表

import retext = 'today is a re test, what do you mind?'print(re.split(',', text)) #['today is a re test', ' what do you mind?']

04 总结

python中的re模块提供了正则表达式的常用方法,每种方法都包括类方法调用(如re.match)或模式串的实例调用(pattern.match)2种形式 常用的匹配函数:match/fullmatch 常用的搜索函数:search/findall/finditer 常用的替换函数:sub/subn 常用的切割函数:split 还有其他很多方法,但不是很常用,具体可参考官方文档 另外,python还有第三方正则表达式库regex可供选择

到此这篇关于一文秒懂python正则表达式常用函数的文章就介绍到这了,更多相关python 正则表达式常用函数内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

try:time.strptime("23:11:11内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • python正则表达式常用函数总结
  • python pandas常用函数详解
  • python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
  • python学习笔记之常用函数及说明
  • python time模块详解(常用函数实例讲解,非常好)
  • sqlparser 一个利用正则表达式解析单句sql的类
  • editplus中的正则表达式实战(5)
  • email正则表达式日常整理大全
  • java正则表达式学习教程
  • 通过正则表达式删除空行的方法
  • 一个获取form表单值正则表达式
  • 正则表达式高级技巧及实例详解 笨活儿
  • 比较实用的正则表达式学习笔记
  • 正则表达式教程之匹配一组字符详解
  • 正则 捕获组(capture group)
  • python时分秒的正则表达式
  • python 正则表达式
  • python 正则表达式 大家进来看看.
  • Python 正则表达式
  • python正则表达式
  • python正则表达式
  • python 正则表达式
  • python 正则表达式
  • python 正则表达式
  • Python正则表达式
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全javascriptasp.netphp编程ajax相关正则表达式asp编程jsp编程编程10000问css/htmlflex脚本加解密web2.0xml/rss网页编辑器相关技巧安全相关网页播放器其它综合dart首页正则表达式python正则表达式常用函数总结python pandas常用函数详解python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)python学习笔记之常用函数及说明python time模块详解(常用函数实例讲解,非常好)sqlparser 一个利用正则表达式解析单句sql的类editplus中的正则表达式实战(5)java正则表达式学习教程通过正则表达式删除空行的方法一个获取form表单值正则表达式正则表达式高级技巧及实例详解 笨活儿比较实用的正则表达式学习笔记正则表达式教程之匹配一组字符详解正则 捕获组(capture group)java 正则表达式详解比较正宗的验证邮箱的正则表达式正则表达式匹配任意字符(包括换最新手机号码、电话号码正则表达javascript 手机号码正则表达式验js利用正则配合replace替换指定字正则表达式匹配不包含某些字符串正则中需要转义的特殊字符小结js正则函数match、exec、test、s最全的常用正则表达式大全——包正则表达式的使用 asp[asp]中的正则表达式运用代码匹配移动/联通/电信手机号码正则表达式小史上最全的php正则表达式(手机号需要加上正则表达式不包含align该怎么写python 实用技巧之正则表达式查找和替换文利用正则表达对ip进行排序的实现代码正则表达式中使用变量赋值自动识别html的标记 替换连接javascript校验密码复杂度的正则表达式
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved