python学习之 - re模块

re模块
功能:实现字符串匹配。

元字符 描述
\ 将下一个字符标记符、或一个向后引用、或一个八进制转义符。例如,“\\n”匹配\n。“\n”匹配换行符。序列“\\”匹配“\”而“\(”则匹配“(”。即相当于多种编程语言中都有的“转义字符”的概念。
^ 匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$ 匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
* 匹配前面的子表达式任意次。例如,zo*能匹配“z”,“zo”以及“zoo”。*等价于{0,}。
+ 匹配前面的子表达式一次或多次(大于等于1次)。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
? 匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“do”或“does”中的“do”。?等价于{0,1}。
{n} n是一个非负整数。匹配确定的n次。例如,“o{2}”不能匹配“Bob”中的“o”,但是能匹配“food”中的两个o。
{n,}n是一个非负整数。至少匹配n次。例如,“o{2,}”不能匹配“Bob”中的“o”,但能匹配“foooood”中的所有o。“o{1,}”等价于“o+”。“o{0,}”则等价于“o*”。
{n,m}m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。例如,“o{1,3}”将匹配“fooooood”中的前三个o。“o{0,1}”等价于“o?”。请注意在逗号和两个数之间不能有空格。
? 当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},{n,m})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串“oooo”,“o+?”将匹配单个“o”,而“o+”将匹配所有“o”。
. 匹配除“\r\n”之外的任何单个字符。要匹配包括“\r\n”在内的任何字符,请使用像“[\s\S]”的模式。
(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“”或“”。
(?:pattern)非获取匹配,匹配pattern但不获取匹配结果,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)非获取匹配,正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)非获取匹配,正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)非获取匹配,反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern)非获取匹配,反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
x|y 匹配x或y。例如,“z|food”能匹配“z”或“food”或"zood"(此处请谨慎)。“(z|f)ood”则匹配“zood”或“food”。
[xyz]字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[a-z]字符范围。匹配指定范围内的任意字符。例如,“[a-z]”可以匹配“a”到“z”范围内的任意小写字母字符。
注意:只有连字符在字符组内部时,并且出现在两个字符之间时,才能表示字符的范围; 如果出字符组的开头,则只能表示连字符本身.
[^a-z]负值字符范围。匹配任何不在指定范围内的任意字符。例如,“[^a-z]”可以匹配任何不在“a”到“z”范围内的任意字符。

\b 匹配一个单词边界,也就是指单词和空格间的位置(即正则表达式的“匹配”有两种概念,一种是匹配字符,一种是匹配位置,这里的\b就是匹配位置的)。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。
\B 匹配非单词边界。“er\B”能匹配“verb”中的“er”,但不能匹配“never”中的“er”。
\cx 匹配由x指明的控制字符。例如,\cM匹配一个Control-M或回车符。x的值必须为A-Z或a-z之一。否则,将c视为一个原义的“c”字符。
\d 匹配一个数字字符。等价于[0-9]。
\D 匹配一个非数字字符。等价于[^0-9]。
\f 匹配一个换页符。等价于\x0c和\cL。
\n 匹配一个换行符。等价于\x0a和\cJ。
\r 匹配一个回车符。等价于\x0d和\cM。
\s 匹配任何不可见字符,包括空格、制表符、换页符等等。等价于[ \f\n\r\t\v]。
\S 匹配任何可见字符。等价于[^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于\x09和\cI。
\v 匹配一个垂直制表符。等价于\x0b和\cK。
\w 匹配包括下划线的任何单词字符。类似但不等价于“[A-Za-z0-9_]”,这里的"单词"字符使用Unicode字符集。
\W 匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
\xn 匹配n,其中n为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,“\x41”匹配“A”。“\x041”则等价于“\x04&1”。正则表达式中可以使用ASCII编码。
\num匹配num,其中num是一个正整数。对所获取的匹配的引用。例如,“(.)\1”匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个向后引用。如果\n之前至少n个获取的子表达式,则n为向后引用。否则,如果n为八进制数字(0-7),则n为一个八进制转义值。
\nm 标识一个八进制转义值或一个向后引用。如果\nm之前至少有nm个获得子表达式,则nm为向后引用。如果\nm之前至少有n个获取,则n为一个后跟文字m的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
\nml如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un 匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(&copy;)。
\< \> 匹配词(word)的开始(\<)和结束(\>)。例如正则表达式\<the\>能够匹配字符串"for the wise"中的"the",但是不能匹配字符串"otherwise"中的"the"。注意:这个元字符不是所有的软件都支持的。 将和之间的表达式定义为“组”(group),并且将匹配这个表达式的字符保存到一个临时区域(一个正则表达式中最多可以保存9个),它们可以用 \1 到\9 的符号来引用。
| 将两个匹配条件进行逻辑“或”(Or)运算。例如正则表达式(him|her) 匹配"it belongs to him"和"it belongs to her",但是不能匹配"it belongs to them."。注意:这个元字符不是所有的软件都支持的。
+ 匹配1或多个正好在它之前的那个字符。例如正则表达式9+匹配9、99、999等。注意:这个元字符不是所有的软件都支持的。
? 匹配0或1个正好在它之前的那个字符。注意:这个元字符不是所有的软件都支持的。
{i} {i,j} 匹配指定数目的字符,这些字符是在它之前的表达式定义的。例如正则表达式A[0-9]{3} 能够匹配字符"A"后面跟着正好3个数字字符的串,例如A123、A348等,但是不匹配A1234。而正则表达式[0-9]{4,6} 匹配连续的任意4个、5个或者6个


修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

常用方法:
re.compile:对正则表达式进行编译,生成一个object对象.然后再进行匹配
re.findall:获取全部的匹配字符,返回一个所有匹配字符串的列表。
re.search:查找整个字符串,找到后通过:变量.group() 返回结果值。找不到则返回空None
re.sub:根据正则表达式找到的字符串用新串替换,返回结果为字符串
re.split:字符串分割, str.split只能按照某个分隔符分割, 正则的分割可以按照某个规则分割.
str1 ="iii444abcddk12sdf98adsf000ppp"
re_split_result = re.split('\d+',str1,maxsplit=0) 最后的参数是匹配规则的次数,默认为0 匹配所有
print(re_split_result) # ['iii', 'abcddk', 'sdf', 'adsf', 'ppp']
re.match :查找字符串开头位置.re.match("\d+",str),没有数字则返回None,通过变量.group()返回结果值
从匹配的字符串中提取出区号和本地号码。re.match('^(\d{3})-(\d{3,8})$', '010-12345')
re.fullmatch():查找的指定字符串必须完全匹配。pattern = re.compile("o[gh]") ,print(pattern.fullmatch("og"))

.group():以字符串打印匹配结果
.groups():以元组打印匹配结果
.groupdict():以字典打印匹配结构
举例:
1 print(re.search('(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})','37148119930612345').groupdict())
2 打印结果:{'province': '3714', 'city': '81', 'birthday': '1993'}
3 print(re.search('(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})','37148119930612345').groups())
4 打印结果:('3714', '81', '1993')
5 print(re.search('(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})','37148119930612345').group())
6 打印结果:3714811993
举例:匹配'\'
1 re.split('\\\\',r'c:\windows\system32')
2 注意点:有\存在的字符串前一定要用'r'标识此字符串中的特殊字符不转意,匹配模式要用4个\

 

转载于:https://www.cnblogs.com/zy6103/p/6844902.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572473.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java从入门到精通第11章_《Java从入门到精通》第十章学习笔记

第10章  Java集合类一、概述Java中的java.util包中提供了一些集合类&#xff0c;也被称为容器&#xff0c;不同于数组&#xff0c;集合的长度是可变的&#xff0c;存放的是对象的引用。常用的集合有List集合、Set集合、Map集合&#xff0c;其中List和Set实现了Collection接口…

Hive之import和export使用详解

在hive-0.8.0后引入了import/export命令。 Export命令可以导出一张表或分区的数据和元数据信息到一个输出位置&#xff0c;并且导出数据可以被移动到另一个hadoop集群或hive实例&#xff0c;并且可以通过import命令导入数据。 当导出一个分区表&#xff0c;原始数据可能在hdfs的…

java中抓阄_如何进行抓阄

展开全部步骤&#xff1a;1、设计总体中的N个个体编号。2、把号码写在号e68a84e8a2ad3231313335323631343130323136353331333431366366签上&#xff0c;将号签放在一个容器中搅拌均匀。3、每次从中抽取一个号签&#xff0c;连续不放回抽取n次。4、将取出的n个号签上所对应的n个…

ARMV8 datasheet学习笔记5:异常模型

1.前言 2.异常类型描述 见 ARMV8 datasheet学习笔记4&#xff1a;AArch64系统级体系结构之编程模型&#xff08;1&#xff09;-EL/ET/ST 一文 3. 异常处理路由对比 AArch32、AArch64架构下IRQ 和Data Abort 异常处理流程图对比. 3.1 IRQ 路由 3.1.1. AArch32 IRQ 路由 图 AAr…

leetcode 三数之和 python_16.leetcode题目讲解(Python):最接近的三数之和

题目如下&#xff1a;题目这道题可以用排一些特殊情况&#xff0c;减少计算量&#xff0c; 参考代码如下&#xff1a;class Solution:def threeSumClosest(self, nums, target):""":type nums: List[int]:type target: int:rtype: int"""# 如果只…

给GridView设置行高

近期在工作中遇到了这样一个问题,使用一个GridView展示数据,item中仅仅是一个TextView,可是里面显示的文字多少不固定多少,必须所有展示出来. 遇到的问题: 1.把item中的宽和高设置match_parent,还是设置成wrap_content,当内容过多的时候,会覆盖下一行的显示的内容. 2.没有一个属…

java导出excel float_【Java】导入导出Excel表格

1、将excel导入到内存1、 调用工作簿Workbook的静态方法getWorkbook(),获得工作簿Workbook对象InputStream in new FileInputStream(file);Workbook wb Workbook.getWorkbook(in);2、 获取Excel表中的工作表格Sheet3、 获取行、列sheet.getRows();sheet.getColumns();4、 读取…

C#的基础数据类型

一、概述 C# 的类型系统是统一的&#xff0c;因此任何类型的值都可以按对象处理。C# 中的每个类型直接或间接地从 object 类类型派生&#xff0c;而 object 是所有类型的最终基类。C#的数据类型主要分为三类&#xff1a;值类型、引用类型和指针类型&#xff08;如下图所示&…

mysql 占用的解决_解决 MySQL 突然占用全部内存的问题

最近更新&#xff1a;19th 6月, 2016前段时间落格从虚拟主机迁移到了独立的vps上&#xff0c;这下所有的维护内容都得我自己动手了。为了性能&#xff0c;另外既然能自己配环境了&#xff0c;自然不会用旧的配置。我用了 Ubuntu Server 16.04 PHP 7.0 Nginx MySQL 5.7 总之&…

[luoguP2957] [USACO09OCT]谷仓里的回声Barn Echoes(Hash)

传送门 团队里的hash水题&#xff0c;数据小的不用hash都能过。。 也就是前缀hash&#xff0c;后缀hash&#xff0c;再比较一下就行。 ——代码 1 #include <cstdio>2 #include <cstring>3 #define ULL unsigned long long4 5 int n, m, ans;6 char s1[81], s2[81]…

java内容寻址_java – 获取方法对象而不按名称寻址方法

有没有办法获取方法对象而不必使用方法的名称来获取它&#xff1f;例如,我有班级&#xff1a;class Car {public String drive();public String giveUp();public String fillUp();}我想创建一个Map< String,Method>方法(又名&#xff1a;(“move”,drive()),(“name”,gi…

【NOI2001】炮兵阵地

【题意】 给定一张n*m的图&#xff0c;每个位置要么是P&#xff0c;要么是H。P的位置可以放炮兵&#xff0c;H则不行。炮兵会朝四个方向&#xff0c;距离2个单位的方格进行攻击&#xff0c;求在没有炮兵互伤的情况下&#xff0c;最多能放的炮兵数量。 【题解】 这道题死坑。 一…

mysql怎么插入10w测试数据_mysql快速插入100万测试数据

向数据库添加100W条测试数据&#xff0c;直接在普通表中添加速度太慢&#xff0c;可以使用内存表添加&#xff0c;然后将内存表数据复制到普通表。创建表内存表DROP TABLE IF EXISTS test_memory;CREATE TABLE test_memory (id INT (11) NOT NULL AUTO_INCREMENT,item1 VARCHAR…

android:Android中用文件初始化sqlite数据库(zz)

很多时候在应用安装初始化时&#xff0c;需要创建本地数据库&#xff0c;同时为数据库添加数据&#xff0c;之后再从数据库中读取数据。这里有2个思路1.先在本地创建一个能支持android使用的sqlite数据库文件,启动时,用现成的sqlite的二进制文件进行直接copy到Android系统的数据…

面向对象-继承

继承&#xff1a; 概念&#xff1a; 继承父类的属性和行为&#xff0c;使得子类对象可以直接具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。继承是多态的前提&#xff0c;如果没有继承&#xff0c;就没有多态。 特点&#xff1a; java只能单…

如何发布Jar包到Maven中央仓库

https://www.iteblog.com/archives/1807.html转载于:https://www.cnblogs.com/longshiyVip/p/6858844.html

java previous_java – 在枚举类型上实现`next`和`previous`的最好方法是什么?

假设我有一个枚举&#xff1a;enum E {A, B, C;}如lucasmo by lucasmo所示&#xff0c;枚举值按照它们被初始化的顺序存储在静态数组中&#xff0c;您可以稍后用E.values()检索(克隆)此数组。现在假设我想实现E#getNext和E#getPrevious&#xff0c;以使所有下列表达式求值为tru…

什么是抽象类

抽象概念&#xff1a; 当我们在做子类共性功能抽取时&#xff0c;有些方法在父类中并没有具体的体现&#xff0c;这个时候就需要抽象类了&#xff01; 在Java中&#xff0c;一个没有方法体的方法应该定义为抽象方法&#xff0c;而类中如果有抽象方法&#xff0c;该类必须定义为…

java 加密 sha_Java加密 消息摘要算法SHA实现详解

SHA是消息摘要算法的一种实现方式&#xff0c;前面已经总结过MD2\4\5的实现&#xff0c;接下来就为大家总结一下SHA的实现。SHA的jdk实现&#xff1a;private static void SHA_JDK(){try {MessageDigest digest MessageDigest.getInstance("SHA");//我们可以通过SHA…

monkeyrunner脚本的录制和回放

参考&#xff1a;http://www.cnblogs.com/android-host/p/5378996.html 需要条件&#xff1a; 1.android-sdk 2.monkey_recorder.py 3.monkey_playback.py 操作步骤&#xff1a; 1)新建monkey_recorder.py文件&#xff0c;复制以下代码&#xff1a; #!/usr/bin/env monkeyrunne…