python,最近不太理解正则表达式了

永爱果果 2020-01-06 09:34:11

matchObj = re.findall(r"ab*", "abcabbba")
print(matchObj)

*为指定前面的字符可以匹配0次或多次,这得怎么理解
"abcabbba"字符传中ab算是匹配一次,那么abc,abb,abbba,abcabbba呢,为什么结果是:

['ab', 'abbb', 'a']
为什么a还是匹配的

...全文
82 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
chuifengde 2020-01-08
  • 打赏
  • 举报
回复
引用 3 楼 永爱果果 的回复:
[quote=引用 1 楼 chuifengde 的回复:] *只对前面最贴近的字符起作用,ab*的意思就是匹配以a开头,b可有可无的一组子串。匹配到一个就接着往下匹配。 abbb为什么不是ab,是因为匹配规则中总是贪婪性的, 意思就是匹配符总是找符合规则中最大的子串.
能帮我看看下面这个正则表达式哪儿错了: import re sql="""--acc_books insert into acc_books(id,name,db_pref,flag,type,text1,text2,text3,text4,text5,flag1,flag2,flag3,flag4,flag5,remark,data_type,book_year,book_code,area_code,split_str,storage_location,date_stamp,set_year) values(2690,'总预算账','3799_01',1,1,'','-1','','','',0,0,-1,-1,-1,'','','2016','371325001_01','371325001','4,2,2,2,2,2,2,2,2,2,2,2,2,2','',to_date('2015-09-24', 'dd-mm-yyyy hh24:mi:ss'),''); """ string=re.sub("(.*values\()(.*)(\);)",r"\2",sql,re.S) print(string) 上面的那个匹配我想要values后面括号的内容,所以我分了3个分组,第一个分组到values(,第二个分组是括号内的内容,第三个分组是); 但是运行结果却是: --acc_books insert into acc_books(id,name,db_pref,flag,type,text1,text2,text3,text4,text5,flag1,flag2,flag3,flag4,flag5,remark,data_type,book_year,book_code,area_code,split_str,storage_location,date_stamp,set_year) 2690,'总预算账','3799_01',1,1,'','-1','','','',0,0,-1,-1,-1,'','','2016','371325001_01','371325001','4,2,2,2,2,2,2,2,2,2,2,2,2,2','',to_date('2015-09-24', 'dd-mm-yyyy hh24:mi:ss'),''[/quote]
string = re.findall("values\((.*)\);",sql,re.DOTALL)
永爱果果 2020-01-07
  • 打赏
  • 举报
回复
引用 1 楼 chuifengde 的回复:
*只对前面最贴近的字符起作用,ab*的意思就是匹配以a开头,b可有可无的一组子串。匹配到一个就接着往下匹配。 abbb为什么不是ab,是因为匹配规则中总是贪婪性的, 意思就是匹配符总是找符合规则中最大的子串.
能帮我看看下面这个正则表达式哪儿错了: import re sql="""--acc_books insert into acc_books(id,name,db_pref,flag,type,text1,text2,text3,text4,text5,flag1,flag2,flag3,flag4,flag5,remark,data_type,book_year,book_code,area_code,split_str,storage_location,date_stamp,set_year) values(2690,'总预算账','3799_01',1,1,'','-1','','','',0,0,-1,-1,-1,'','','2016','371325001_01','371325001','4,2,2,2,2,2,2,2,2,2,2,2,2,2','',to_date('2015-09-24', 'dd-mm-yyyy hh24:mi:ss'),''); """ string=re.sub("(.*values\()(.*)(\);)",r"\2",sql,re.S) print(string) 上面的那个匹配我想要values后面括号的内容,所以我分了3个分组,第一个分组到values(,第二个分组是括号内的内容,第三个分组是); 但是运行结果却是: --acc_books insert into acc_books(id,name,db_pref,flag,type,text1,text2,text3,text4,text5,flag1,flag2,flag3,flag4,flag5,remark,data_type,book_year,book_code,area_code,split_str,storage_location,date_stamp,set_year) 2690,'总预算账','3799_01',1,1,'','-1','','','',0,0,-1,-1,-1,'','','2016','371325001_01','371325001','4,2,2,2,2,2,2,2,2,2,2,2,2,2','',to_date('2015-09-24', 'dd-mm-yyyy hh24:mi:ss'),''
永爱果果 2020-01-07
  • 打赏
  • 举报
回复
引用 1 楼 chuifengde 的回复:
*只对前面最贴近的字符起作用,ab*的意思就是匹配以a开头,b可有可无的一组子串。匹配到一个就接着往下匹配。 abbb为什么不是ab,是因为匹配规则中总是贪婪性的, 意思就是匹配符总是找符合规则中最大的子串.
非常感谢,我以为前面的字符指的是ab呢,原来只是b,也就是说a必须有,b可有可无 如果要是ab+,那么ab都必须有才行
chuifengde 2020-01-07
  • 打赏
  • 举报
回复
*只对前面最贴近的字符起作用,ab*的意思就是匹配以a开头,b可有可无的一组子串。匹配到一个就接着往下匹配。 abbb为什么不是ab,是因为匹配规则中总是贪婪性的, 意思就是匹配符总是找符合规则中最大的子串.
正则表达式经典实例》讲解了基于8种常用的编程语言使用正则表达式的经典实例。书中提供了上百种可以在实战中使用的实例,以帮助读者使用正则表达式来处理数据和文本。对于如何使用正则表达式来解决性能不佳、误报、漏报等常见的错误以及完成一些常见的任务,《正则表达式经典实例》给出了涉及基于C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET等编程语言的解决方案。《正则表达式经典实例》的读者对象是对正则表达式感兴趣的软件开发人员和系统管理员。 《正则表达式经典实例》旨在教会读者很多新的技巧以及如何避免语言特定的陷阱,读者可以通过《正则表达式经典实例》提供的实例解决方案库来解决实践中的复杂问题。 《正则表达式经典实例》:每个程序员都会遇到需要使用正则表达式的情况,但是要用好正则表达式却并不容易。《正则表达式经典实例》提供了100多个实例,以帮助读者使用正则表达式处理数据和文本。即使有经验的用户也经常会遇到性能不佳、误报、漏报等让人挠头的错误,《正则表达式经典实例》对于如何使用正则表达式来解决一些常见的问题给出了按部就班的解决方案,其中包括C#、Java、JavaScript、Perl、PHP、Python、Ruby和VB.NET的实例。 《正则表达式经典实例》主要包括以下内容: 通过一个精练的教程理解正则表达式的基本原理和技巧; 在不同的编程语言和脚本语言中有效使用正则表达式; 学习如何对输入进行合法性检查和格式化; 处理单词、文本行、特殊字符和数值; 学习如何在uRL、路径、标记语言和数据交换中使用正则表达式; 学习更高深的正则表达式特性中的微妙之处; 理解在不同语言中正则表达式的API、语法和行为之间的区别; 创建更好的正则表达式来满足个性化的需求。 使用8种编程语言的详细解决方案,包括一个正则表达式简明教程
《精通正则表达式(第3版)》讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具——Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)——中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的“一夫当关”的局面,称其为正则表达式圣经,绝对当之无愧。 ——《程序员》杂志技术主编孟岩 《精通正则表达式(第3版)》包含了对PHP及其正则表达式的讲解。这一版的更新也反映了其他语言的发展,深入讲解了Sun的java.util.regex,并特别提到了Java1.4.2和Java1.5/1.6之间的众多差异。 本书的内容: ·各种语言和工具的功能比较 ·正则引擎的工作原理 ·优化(能节省大量的时间) ·准确匹配期望的文本 ·针对具体语言的章节 《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。
随着互联网的迅速发展,几乎所有工具软件和程序语言都支持的正则表达式也变得越来越强大和易于使用。《精通正则表达式(第3版)》是讲解正则表达式的经典之作。《精通正则表达式(第3版)》主要讲解了正则表达式的特性和流派、匹配原理、优化原则、实用诀窍以及调校措施,并详细介绍了在Perl、Java、.NET、PHP中正则表达式的用法。 《精通正则表达式(第3版)》自第1版开始着力于教会读者 "以正则表达式来思考",来让读者真正"精通"正则表达式。该版对PHP的相关内容、Java1.5和Java1.6的新特性作了可观的扩充讲解。任何有机会使用正则表达式的读者都将因《精通正则表达式(第3版)》而受益匪浅。 《精通正则表达式(第3版)》讲解正则表达式,这种工具能够提高工作效率、让生活变得更轻松。精心调校后的正则表达式只需要十多秒就能完成以前数小时才能完成的枯燥任务。如今,正则表达式已经成为众多语言及工具--Perl、PHP、Java、Python、Ruby、MysQL、VB-NET和c#(以及.NETFramework中的任何语言)--中的标准特性,依靠它,你能以之前完全不敢设想的方式进行复杂而精巧的文本处理。十年三版,再显王者风范,近30年开发经验的智慧结晶,深入理解正则表达式,彻底修炼基本功,全球第一本全面深入讲解正则表达式的经典巨著,《程序员》杂志技术主编孟岩鼎力推荐。 专家点评:《精通正则表达式》是系统学习正则表达式的唯一最权威著作。任何时候,任何地方,只要提到正则表达式著作,人们都会提到这本书。该书质量之高,声誉之盛,使得几乎没有人企图挑战它的地位,从而在正则表达式图书领域形成了独特的"一夫当关"的局面,称其为正则表达式圣经,绝对当之无愧。 --《程序员》杂志技术主编孟岩 《精通正则表达式(第3版)》包含了对PHP及其正则表达式的讲解。这一版的更新也反映了其他语言的发展,深入讲解了Sun的java.util.regex,并特别提到了Java1.4.2和Java1.5/1.6之间的众多差异。 本书的内容: ·各种语言和工具的功能比较 ·正则引擎的工作原理 ·优化(能节省大量的时间) ·准确匹配期望的文本 ·针对具体语言的章节 《精通正则表达式(第3版)》,以明晰轻松的笔调向程序员深入浅出地讲解复杂的知识,并给出了现实世界中复杂问题的解决办法,读者能够立刻运用书中丰富的知识,巧妙而高效地解决各种问题。

37,718

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧