Python正则表达式基�
正则表达式是处理字符串的强大工具,它不是Python的一部分。
其他编程语言也有正则表达式的概念,但唯一的区别是不同的编程语言有不同的语法。
它有自己独特的语法和独立的处理引擎。在提供正则表达式的语言中,正则表达式的语法是相同的。
下图显示了使用正则表达式进行匹配的过程:
1.1导言
正则表达式不是Python的一部分。正则表达式是处理字符串的强大工具。它有自己独特的语法和独立的处理引擎。它可能不如str自己的方法高效,但它非常强大。得益于此,在提供正则表达式的语言中,正则表达式的语法都是一样的,唯一的区别就是不同编程语言支持的语法数量不同。但别担心。不支持的语法通常是不常见的部分。
正则表达式是一种特殊的字符序列,可以帮助您方便地检查字符串是否匹配某个模式。Python从1.5版本开始增加re模块,提供Perl风格的正则表达式模式。re模块使Python语言具有所有的正则表达式功能。
1.2各种用法要知道。
模式使用特殊的语法来表示正则表达式:
字母和数字代表它们自己。正则表达式模式中的字母和数字匹配相同的字符串。大多数字母和数字在反斜杠前有不同的含义。标点符号只有在被转义时才匹配,否则代表特殊意义。反斜杠本身需要用反斜杠转义。
由于正则表达式通常包含反斜杠,您最好使用原始字符串来表示它们。模式元素(如r'/t ',相当于'//t ')匹配相应的特殊字符。
下表列出了正则表达式模式语法中的特殊元素。如果使用模式并提供可选的标志参数,一些模式元素的含义将会改变。
当然有很多用法。后面我们会给出一些常用的用法。多尝试,你就会明白。
模型
模式描述匹配字符串的开始$匹配字符串的结束。匹配除换行符以外的任何字符。如果指定了DOTALL标记,它可以匹配任何字符,包括换行符。[.]用于表示一组单独列出的字符:[amk]匹配不在[]、“M”或“K”[.];[a,B,c]匹配除A,B和C以外的字符.Re*匹配0个或更多表达式。Re匹配一个或多个表达式。re?匹配前面正则表达式定义的0或1个片段,非贪婪方式re{ n} re{ n,}与前面的n个表达式完全匹配。Re{ n,m}匹配前面正则表达式定义的片段n到m次,贪婪的方式a| b匹配A或b (re) G匹配括号中的表达式,这也意味着一个组(?正则表达式包含三个可选标志:I、m或X.只有括号中的区域会受到影响。(?-imx)正则表达式关闭I、m或x可选标志。只有括号中的区域会受到影响。(?3360re)与(.),但不代表一个群体(?Imx:)重新使用I、m或x可选标志(?-imx: re)不要使用I、m或x可选标志(?# .)评论。(?=re)正向分隔符。如果它包含正则表达式,则由.当前位置匹配成功,则成功,否则失败。但是,一旦尝试了包含的表达式,匹配引擎就没有任何改进。在模式的其余部分尝试分隔符的右侧。(?Re)正向负分隔符。与正分隔符相反;当包含的表达式在字符串的当前位置不匹配时成功(?Re)匹配独立模式,省略回溯。\ w匹配字母数字字符\ w匹配非字母数字字符\ s匹配任何空白字符,这相当于[\ t \ n \ r \ f]。\匹配任何非空字符\匹配任何数字,相当于[0-9]。\ d匹配任何非数字字符\A匹配字符串开始\Z匹配字符串结束,如果有换行符,那么,C \z匹配字符串结束\G匹配最后一次匹配完成的位置。\b匹配单词边界,即单词和空格之间的位置。例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”。\B匹配非单词边界。“Er\B”可以匹配“动词”中的“Er”,但不能匹配“never”中的“er”。\n,\t等。匹配新的行字符。匹配标签。等待\1.\9以匹配第n个分组的子表达式。\10匹配第n个分组的子表达式(如果匹配)。否则,指八进制字符代码的表达。性格类型
示例描述[Pp]ython匹配“Python”或“Python”rub[ye]匹配“ruby”或“rube”[aeiou]匹配括号中的任何字母[0-9]匹配任何数字。类似于[0123456789] [a-z],匹配任意小写字母[a-z],匹配任意大写字母[a-zA-Z0-9],匹配任意字母和数字[aeiou],除aeiou字母[0-9]外的所有字符都匹配除数字外的特殊字符类。
描述。匹配除“\n”以外的任何单个字符。若要匹配包括“\n”在内的任何字符,请使用像“[”这样的模式。\n]'。\d匹配一个数字字符。相当于[0-9]。\D匹配一个非数字字符。相当于[0-9]。\s匹配任何空白字符,包括空格、制表符、分页符等。相当于[\f\n\r\t\v]。\S匹配任何非空白字符。相当于[\ f \ n \ r \ t \ v]。\ w匹配任何单词字符,包括下划线。相当于“[A-Za-z0-9_]”。\ w匹配任何非单词字符。相当于“[a-za-z0-9 _]”。1.3re.match函数。
Re.match尝试从字符串的起始位置匹配一个模式。如果在起始位置匹配不成功,match()将返回none。
re.match(模式、字符串、标志=0)
模式正则表达式
字符串匹配字符串。
flags标志位用于控制匹配模式,这将在后面描述。
直接进入程序:
导入字符串,rer='abc' #正则表达式if re.match(r,' ABC '): # match print ' done ' else : print ' fail ' result :
完成的
您可以根据上表中给出的用法进行更多练习:
导入字符串,rer='a.c' #正则表达式。匹配除换行符以外的任何字符。当戒指。如果指定了DOTALL标记,它可以匹配任何字符,包括换行符。如果。匹配(r,' ABC') :打印环。匹配(r,' ABC ')打印“完成”否则:打印“失败”结果:
_sre。0x01dd6158处的SRE匹配对象
完成的
请注意,这不是显示成功匹配的字符串。re.match()返回一个对象,但如果失败,则不返回任何对象。
我们可以通过group(num)或groups()匹配对象函数得到匹配表达式。
matching object方法描述由group(num=0)匹配的整个表达式的字符串。Group()可以一次输入多个组号,在这种情况下,它将返回一个包含对应于这些组的值的元组。Groups()返回包含所有组字符串的元组,从1到包含的组号。程序:
导入字符串,如果re.match (r,' ABC') : line=re.match (r,' ABC ')print line . group()else 3360 print ' defend '结果:
字母表
1.3re .搜索功能。
Re.search()扫描整个字符串并返回第一个成功的匹配。
re.search(模式、字符串、标志=0)
模式正则表达式
字符串匹配字符串。
Flags标志位,用于控制匹配模式。
与re.match()一样,如果匹配成功,re.search方法返回一个匹配的对象,否则返回None。
直接进入程序:
导入字符串,rer=' ABC ' s=' aacawcabc ' if re . search(r,s) :line=re.search (r,s) printline.group()结果:
字母表
注意:
re.match()和re.search()之间的差异:
Re.match只匹配字符串的开头。如果字符串的开头不符合正则表达式,则匹配失败,函数返回None。并重新搜索整个字符串,直到找到匹配项。
1.4re .子功能
re.sub()函数用于替换匹配项。
re.sub(模式,repl,字符串,最大值=0)
模式正则表达式
Repl替换项目
字符串匹配字符串。
计数被替换的最大次数。默认值为0,这意味着替换所有匹配项。
返回的字符串在字符串中被最左边的不重复的RE匹配所替换。如果找不到模式,字符将原封不动地返回。
程序:
导入字符串,repattern='\d' repl='!'S=' abcdefg' line=re。子(图案、复制器、s)打印行结果:
!!abcdefg
1.5正则表达式修饰符-可选标志。
让我们谈谈什么是标记:
正则表达式可以包含一些可选的标志修饰符来控制匹配模式。修饰符被指定为可选标志。可以通过按位“或”(|)来指定多个标志。例如re。我| re。m设置为I和m标志:
修饰符描述re。我使匹配不区分大小写。re。l使本地识别(区域感知)匹配re。m多行匹配,影响和$ re。美国制造。匹配所有字符,包括换行符。re。u根据Unicode字符集解析字符。此标志影响。通过给你一个更灵活的格式,你可以更容易地编写正则表达式。程序:
导入字符串,如果是,repattern='[aa][bb][cc][DD]' s=' ABCD '。匹配(模式,s) :行=re。匹配打印行.组()结果:
加快收寄投递系统
上述过程可以通过选择标志位来实现:
导入字符串,如果是,repattern=' ABCD's=' ABCD '。匹配(模式,s,re。I) :线=re。匹配(模式,s,re。I)打印行。group()结果;
加快收寄投递系统
1.6re .编译函数。
使用re的一般步骤是使用re.compile()函数将正则表达式的字符串形式编译成Pattern实例,然后使用Pattern实例处理文本并获得matching结果(一个Match实例),最后使用Match实例获取信息并执行其他操作。
程序:
导入字符串,repattern=re.compile(' \ d ')s=' aabbccdd ' if pattern . match(s): line=pattern . match(s)print line . group()结果:
11223344
版权声明:Python正则表达式基�是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。