python中分割字符串两种方法正则分组别名_Python 正则表达式(分组)

正则表达式分组

分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。

分完组以后,要想获得某个分组的内容,直接使用group(num)和groups()函数去直接提取就行。

例如:提取代码中的超链接中的文本

>>> s='

更多

dfsl

'

>>> print re.search(r'(.*)',s).group(1)

更多

或者

>>> print re.match(r'.*(.*)',s).group(1)

更多

按照上面的分组匹配以后,我们就可以拿到我们想拿到的字串,但是如果我们正则表达式中括号比较多,那我们在拿我们想要的字串时,要去挨个数我们想要的字串时第几个括号,这样会很麻烦,这个时候Python又引入了另一种分组,那就是命名分组,上面的叫无名分组。

命名分组

命名分组就是给具有默认分组编号的组另外再给一个别名。命名分组的语法格式如下:

(?P正则表达式)#name是一个合法的标识符

如:提取字符串中的ip地址

>>> s = "ip='230.192.168.78',version='1.0.0'"

>>> re.search(r"ip='(?P\d+\.\d+\.\d+\.\d+).*", s)

>>> res.group('ip')#通过命名分组引用分组

'230.192.168.78'

后向引用

正则表达式中,放在圆括号“()”中的表示是一个组。然后你可以对整个组使用一些正则操作,例如重复操作符。

要注意的是,只有圆括号”()”才能用于形成组。”“用于定义字符集。”{}”用于定义重复操作。

当用”()”定义了一个正则表达式组后,正则引擎则会把被匹配的组按照顺序编号,存入缓存。这样我们想在后面对已经匹配过的内容进行引用时,就可以用”\数字”的方式或者是通过命名分组进行”(?P=name)“进行引用。\1表示引用第一个分组,\2引用第二个分组,以此类推,\n引用第n个组。而\0则引用整个被匹配的正则表达式本身。这些引用都必须是在正则表达式中才有效,用于匹配一些重复的字符串。

如:

#通过命名分组进行后向引用

>>> re.search(r'(?Pgo)\s+(?P=name)\s+(?P=name)', 'go go go').group('name')

'go'

#通过默认分组编号进行后向引用

>>> re.search(r'(go)\s+\1\s+\1', 'go go go').group()

'go go go'

交换字符串的位置

>>> s = 'abc.xyz'

>>> re.sub(r'(.*)\.(.*)', r'\2.\1', s)

'xyz.abc'

前向肯定断言、后向肯定断言

前向肯定断言的语法:

(?=pattern)

后向肯定断言的语法:

(?<=pattern)

需要注意的是,如果在匹配的过程中,需要同时用到前向肯定断言和后向肯定断言,那么必须将后向肯定断言写在正则语句的前面,前向肯定断言写在正则语句的后面,表示后向肯定模式之后,前行肯定模式之前。

如:获取c语言代码中的注释内容

>>> s1='''char *a="hello world"; char b='c'; /* this is comment */ int c=1; /* t

his is multiline comment */'''

>>> re.findall( r'(?<=/\*).+?(?=\*/)' , s1 ,re.M|re.S)

[' this is comment ', ' this is multiline comment ']

(?<=/*)这个是后向肯定断言,表示“/*”之后。(?=*/)这个为前向肯定断言,表示“*/”之前,这两合并起来就是一个区间了,所以后向肯定断言放在前向肯定断言前面。

前向否定断言、后向否定断言

前向否定断言语法:

(?!pattern)

后向否定断言语法:

(?

前向否定和后向否定实例:

#提取不是.txt结尾的文件

>>> f1 = 'aaa.txt'

>>> re.findall(r'.*\..*$(?

[]

#提取不以数字开头的文件

>>> re.findall(r'^(?!\d+).*','1txt.txt')

[]

#提取不以数字开头不以py结尾的文件

>>> re.findall(r'^(?!\d+).+?\..*$(?

[]

>>> re.findall(r'^(?!\d+).+?\..*$(?

['test.txt']

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

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

相关文章

SpringMVC核心——视图渲染(包含视图解析)问题

一、本来想说的是返回值处理问题&#xff0c;但在 SpringMVC 中&#xff0c;返回值处理问题的核心就是视图渲染。所以这里标题叫视图渲染问题。 本来想在上一篇文章中对视图解析进行说明的&#xff0c;但是通过源码发现&#xff0c;它应该算到视图渲染中&#xff0c;所以在这篇…

国际机器人联合会:全球工业机器人2019报告

来源&#xff1a;资本实验室据国际机器人联合会&#xff08;IFR&#xff09;最新发布的《全球机器人2019——工业机器人》报告数据&#xff0c;2018年全球工业机器人出货量42.2万台&#xff0c;比上年增长6%&#xff1b;年销售额达到165亿美元&#xff0c;创下新纪录。 IFR预测…

POSIX互斥锁api函数

初始化互斥锁 int pthread_mutex_init(pthread_mutex_t *mutex,const pthread_mutexattr_t *attr); 参数attr指定了新建互斥锁的属性。如果参数attr为NULL&#xff0c;则使用默认的互斥锁属性。 锁定互斥锁 int pthread_mutex_lock(pthread_mutex_t *mutex); 当 pthread_…

mediarecorder添加时间戳_Python脚本实现数据处理(官方实例)和Hive自带时间函数...

官网示例官网地址&#xff1a;https://cwiki.apache.org/confluence/display/Hive/GettingStarted#GettingStarted-ApacheWeblogData下载数据wget http://files.grouplens.org/datasets/movielens/ml-100k.zip我们下载好数据安装unzip yum install -y unzip解压数据创建库创建表…

从空城计到阿尔法狗,博弈论如何渗透我们的生活?

来源&#xff1a;返朴2016年&#xff0c;有那么一只“狗”大闹天宫&#xff0c;这在整个人类社会引起了轩然大波。它就是阿尔法狗&#xff08;AlphaGo&#xff09;&#xff0c;是谷歌&#xff08;Google&#xff09;旗下公司DeepMind 在人工智能与博弈论交叉研究上的一个杰作。…

POSIX条件变量API函数

初始化条件变量 int pthread_cond_init(pthread_cond_t *cond,const pthread_condattr_t *attr); 返回值&#xff1a;函数成功返回0&#xff1b;任何其他返回值都表示错误 初始化一个条件变量。当参数attr为空指针时&#xff0c;函数创建的是一个缺省的条件变量。 阻塞 in…

阶段性思考

算上在学校&#xff0c;学习前端已经两年了&#xff0c;但水平依旧不高&#xff0c;至今都只愿意钻研布局和交互&#xff0c;把兼容和动效玩得哈皮&#xff0c;但其实依旧没有装逼的自信。 也不得不回到当初的那个思考&#xff0c;如果只是做网页&#xff0c;又何必弄前端&…

反弹式木马原理_汽车避震器的原理与改装问题

一、避震器or避振器“震”字是指车轮在路面的滚动过程中&#xff0c;由于路面的不平&#xff0c;从路面传递上来的震动&#xff0c;而不是人为制造“振”动&#xff0c;所以使用“震”字更科学。二、避震器的工作原理避震器的工作原理是通过活塞运动产生阻尼力&#xff0c;将动…

科学探索奖首批50名获奖者都有谁?

来源&#xff1a;知识分子9月20日上午&#xff0c;经过四个多月的评审&#xff0c;2019年 获奖名单正式公布。来自全国26个科研单位、高校和企业的50位科学家成为首届“科学探索奖”获奖者&#xff0c;每人将在未来5年获得由腾讯基金会资助的300万元人民币。据悉&#xff0c;20…

python_递归原理

需要:  输出这样一些有规律数据: [0,1,1,2,3,5,8,13,21,34.......]看上面需要好像有一些规律&#xff0c;没错&#xff0c;就是大家熟悉的婓那波契数列,n(n-1)(n-2)如1385&#xff1b;运用递归原理得:def func(arg1,arg2): if arg1 0: print arg1,arg2 arg3 a…

POSIX信号量API函数

头文件&#xff1a;semaphore.h 初始化&#xff1a; int sem_init(sem_t *sem, int pshared, unsigned int value); sem_init() 初始化一个信号量&#xff0c;信号量对象为sem。value 参数指定信号量的初始值。 pshared 参数指明信号量是由进程内线程共享&#xff0c;还是由…

untitled软件怎么用_苹果手机怎么用4G网络于App Store下载超过200MB以上的软件

近两年来&#xff0c;随着苹果中国市场份额被国产品牌挤占了不少&#xff0c;他们越来越懂得“聆听”中国用家的需要&#xff0c;其中一项便是用手机网络(4G)下载iOS应用。在这一点上我们中国人也不用再妄自菲薄了&#xff0c;在疯狂的4G建网以后&#xff0c;我们国家已经拥有全…

关于人脸识别的最全研究!

来源&#xff1a;北京物联网智能技术应用协会本文内容涵盖人脸识别发展历程、市场研究、核心技术、商业应用以及产业落地、个人看法等干货研究。注意&#xff0c;本文干货满满&#xff0c;约有2万7千字&#xff0c;强烈建议大家先收藏后学习&#xff01;01 发展史1. 人脸识别的…

Stream学习过程中遇到的一个问题记录

Stream学习过程中遇到的一个问题记录 Test public void stream_modifiedV2(){List<String> strings Arrays.asList("aaa","bb","cc","dddddddddddddddddddddddddddddddd");Stream<String> stringStream strings.stream(…

C++ swap用法

swap用于交换两个元素的值 template<class T> void swap(T &a,T &b) {T c(a);ab;bc; } 例如交换两个int型变量的值&#xff1a; #include <iostream> using namespace std;int main() {int a1,b2;swap(a,b);cout<<a<<" "<<…

python table类中的 可以作为初步观察工具_Python程序设计基础_课程2020最新章节测试网课课后答案...

Python程序设计基础_课程2020最新章节测试网课课后答案更多相关问题科学探究的过程一般要经过______、作出假设、制定方案、实施方案&#xff0c;得出结论等五个步骤&#xff0e;在生物学研究中&#xff0c;当实验的结果与原有的知识发生矛盾时&#xff0c;应大胆地修正原有的知…

关于字节对齐以及内存占用

参考博文&#xff1a; http://www.javamex.com/tutorials/memory/object_memory_usage.shtml 本文主要考虑正常情况下一个对象在堆上的内存占用情况&#xff1a;对于下面的特殊情况不作讨论 1、某些情况下&#xff0c;JVM可能不会把对象存储在堆上&#xff1a;比如小的线程私有…

人工智能应用实践与趋势

来源&#xff1a;阿里云研究中心《崛起的超级智能》一书主要阐述当今天人类为人工智能的春天到来而兴奋&#xff0c;为人工智能是否超越人类而恐慌的时候&#xff0c;一个更为庞大、远超人类预期的智能形态正在崛起&#xff0c;种种迹象表明50年来&#xff0c;互联网正在从网状…

C++中set和map的erase用法

删除容器中值为 val 的元素 size_type erase (const value_type& val); 删除 it迭代器指向的元素 iterator erase (const_iterator it); 删除 [first,last) 区间内的所有元素 iterator erase (const_iterator first, const_iterator last);

excel表格打印每页都有表头_这么漂亮的Excel表格,用黑白打印机打印真是可惜了...

我们在日常工作中&#xff0c;利用Excel制作的表格通过会填充颜色&#xff0c;设置字体和边框格式、颜色&#xff0c;把表格弄的漂漂亮亮的&#xff0c;一个是为了缓解视觉疲劳&#xff0c;另一个是为了老板看到漂亮的表格一不小心加工资呢&#xff0c;但是一个问题出来了&…