Python re正则表达式

Python re正则表达式

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

参考:

博客园《Python正則表達式指南》

博客园《Python之re模块》


在此感谢博主的无私奉献,本文主要介绍python中re模块的几个简单使用方法。具体的使用方法请參考博客园的这两篇博文

 

python在文本处理方面是非常强大的,得益于有re这样强大的模块。re模块是用于处理文本的超级强大的工具。当然了。其它语言可能也提供了正則表達式的模块。可是个人感觉python的re模块做的是非常好的

 

当然了,外行会问了,正則表達式是做什么的呀?听起来玄乎其神的。说白了就是,给你一个非常大的文本文件,让你在里面找符合一定规律的语句,你怎么找呢?比方让你找一个这种语句:ABCDabcd,你或许会说直接用str类的查找就好了。好,那我问你假设让你查找一个这种呢ABCD???

abcd,当中的问号表示随意的一个数字,也就是(ABCD三个数字abcd)这种形式呢?难倒你了吧。哈哈哈,如今使用正則表達式处理这种问题就妥妥的啦

 

简介一下,使用正則表達式的流程:

A。 初始化一个正則表達式引擎

B, 使用这个引擎在给定的文本里面查找符合条件的结果

 

先来看一下re模块的语法吧,见下图:


Python re正则表达式

Python re正则表达式

re中的函数:

 

re.compile(pattern, flags=0)

返回一个正則表達式对象。以下两种写法的作用是等价的:

写法1:

prog = re.compile(pattern)

result = prog.match(string)

写法2:

result = re.match(pattern, string)


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

从string的开头进行匹配,假设开头没有匹配成功。则返回None,假设匹配成功,返回且只返回第一个match object(一会再介绍match object的使用方法)

 

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

扫描整个string,假设没有匹配,返回None,否则只返回第一个成功匹配的matchobject

 

re.split(pattern, string, maxsplit=0, flags=0)

通过正則表達式将字符串分离。假设用括号将正則表達式括起来,那么匹配的字符串也会被列入到list中返回。maxsplit是分离的次数。maxsplit=1分离一次,默觉得0,不限制次数。

演示样例:

>>> re.split(‘\W+’, ‘Words, words, words.’)

[‘Words’, ‘words’, ‘words’, ”]

>>> re.split(‘(\W+)’, ‘Words, words, words.’)

[‘Words’, ‘, ‘, ‘words’, ‘, ‘, ‘words’, ‘.’, ”]

>>> re.split(‘\W+’, ‘Words, words, words.’, 1)

[‘Words’, ‘words, words.’]

>>> re.split(‘[a-f]+’, ‘0a3B9’, flags=re.IGNORECASE)

[‘0’, ‘3’, ‘9’]

或许你可能看起来比較吃力,提示一下:\W表示非单词字符,+号表示匹配前一个字符1次或多次,这样理解起来就easy一些了吧。还有,假设在字符串的開始或结尾就匹配,返回的list将会以空串開始或结尾,假设字符串不能匹配,将会返回整个字符串的list。

 

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

找到RE 匹配的全部子串,并把它们作为一个列表返回。这个匹配是从左到右有序地返回。

假设无匹配。返回空列表(个人认为这个函数是最经常使用的)

 

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

搜索string。返回一个顺序訪问每一个匹配结果(matchobject)的迭代器

演示样例:

import re

p = re.compile(r’\d+’)

for m in p.finditer(‘one1two2three3four4’):

print(m.group(),end=’’)

### output ###

# 1 2 3 4

 

re.sub(pattern, repl, string, count=0, flags=0)

使用repl替换string中每个匹配的子串后返回替换后的字符串。 

当repl是一个字符串时,能够使用\id或\g<id>、\g<name>引用分组。但不能使用编号0。 

当repl是一个方法时。这种方法应当仅仅接受一个參数(Match对象)。并返回一个字符串用于替换(返回的字符串中不能再引用分组)。 

count用于指定最多替换次数,不指定时所有替换。

 

re.subn(pattern, repl, string, count=0, flags=0)

实现的功能跟sub()函数是一样的,可是返回的结果是(new_string,number_of_subs_made)

 


match object:


匹配对象,这个是match()。search(),finditer()函数返回的值。

属性:

string: 匹配时使用的文本。

re: 匹配时使用的Pattern对象。

pos: 文本中正則表達式開始搜索的索引。

值与Pattern.match()和Pattern.seach()方法的同名參数同样。

endpos: 文本中正則表達式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名參数同样。

lastindex: 最后一个被捕获的分组在文本中的索引。假设没有被捕获的分组,将为None。

lastgroup: 最后一个被捕获的分组的别名。假设这个分组没有别名或者没有被捕获的分组,将为None。

 

方法:

group([group1, …]): 

获得一个或多个分组截获的字符串。指定多个參数时将以元组形式返回。group1能够使用编号也能够使用别名;编号0代表整个匹配的子串;不填写參数时,返回group(0)。没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。

groups([default]):

以元组形式返回所有分组截获的字符串。

相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默觉得None。

groupdict([default]): 

返回以有别名的组的别名为键、以该组截获的子串为值的字典。没有别名的组不包括在内。

default含义同上。

start([group]): 

返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。

group默认值为0。

end([group]):   

返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。

span([group]): 

返回(start(group), end(group))。

expand(template): 

将匹配到的分组代入template中然后返回。template中能够使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。

\id与\g<id>是等价的;但\10将被觉得是第10个分组,假设你想表达\1之后是字符’0’,仅仅能使用\g<1>0。


版权声明:本文博主原创文章。博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116764.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • VMM与OVM_vvm是什么意思

    VMM与OVM_vvm是什么意思验证方法学主要有vmm和ovm两种。摘录一些言论,供参考:    个人感觉Synopsys的口碑好一些,Cadence的FAE比较能忽悠,但有时候不是很能解决问题。偶绝对不是Synopsys的托了;synopsys的VMM更成熟;前端设计还是喜欢synopsys多一点;VMM的用户可能多一些,特别在国内(个人感受),不过Synopsys的东西,质量上不如C

    2022年9月16日
    2
  • java voliate_voliate关键字及其示例

    java voliate_voliate关键字及其示例voliate关键字1使变量在线程间可见对于避免不可见性问题,Java还提供了一种弱形式的同步,即使用了volatile关键字。该关键字确保了对一个变量的更新对其他线程可见。当一个变量被声明为volatile时候,线程写入时候不会把值缓存在寄存器或者或者在其他地方,当线程读取的时候会从主内存重新获取最新值,而不是使用当前线程的拷贝内存变量值。volatile虽然提供了可见性保证,但是不能使用他来…

    2022年4月29日
    84
  • 照片切割器_切割图片的软件

    照片切割器_切割图片的软件两款图片切割工具ShoeBox:http://renderhjs.net/shoebox/BigShear:https://www.fancynode.com.cn/bigshear下面试下Sh

    2022年8月3日
    4
  • maven 项目打jar包 并包含所有依赖「建议收藏」

    maven 项目打jar包 并包含所有依赖「建议收藏」背景:基于最近项目部署,需要打jar包,然后涉及接口调用,反复测试,出现了各种问题,最后找到合理方案,特做以下总结:一、延伸知识:Springboot打jar包命令1.把之前打过的包通通干掉mvnpackageclean-Dmaven.test.skip=true2.重新打包mvnpackage-Dmaven.test.skip=true3.Springboot的打包插件<build><plugins>&

    2022年6月19日
    83
  • mtk-keypad[通俗易懂]

    mtk-keypad[通俗易懂]一.keypad基本原理col作为输出,row作为输入检测,低电平有效colA~D轮流输出低电平,通过rol1~4上的低电平可以检测是哪个按键按下了但是存在这样的问题,A1,A2,B1同时按下,会造成B2按下的假象,称为鬼影(这3个键导通,colB打开,row2处也会检测到低电平)可以通过增加二极管的方式防止鬼影问题二.keypadporti…

    2022年5月4日
    65
  • XLSTransformer 导出Excel数据[通俗易懂]

    XLSTransformer 导出Excel数据[通俗易懂]先上代码:packagecn.export.util;importjava.io.FileInputStream;importjava.net.URLEncoder;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.ServletOutp

    2022年7月24日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号