Python学习笔记之正则表达式基本知识

xiaoxiao2021-02-28  11

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的

一般字符串 #encoding=utf-8 import re # 1 '.'匹配任意字符除了换行字符"\n" pattern=re.compile(r"abc.d") macth=pattern.match("abc1d") print macth.string #输出abc1d #2 '\'转移字符 .在正则表达式中任意 pattern1=re.compile(r"ab\.d") macth1=pattern1.match("ab.d") print macth1.string #ab.d #3 [...]字符集 # [a-z][A-Z][0-9] 分别代表 全部26个大小写英文字母和数字 pattern2=re.compile(r"[abc]") macth2=pattern2.match("ab") print macth2.string #ab

2.预定义字符集(可以写成[……])

#encoding=utf-8 import re #\d数字[0-9] pattern=re.compile(r"\d") macth=pattern.match("123567") print macth.group() #1 #\D 非数字:[^\d] pattern=re.compile(r"\D") macth=pattern.match("w") print macth.group() #w #\s 空白字符 [<空格>\t\r\n\f\v] pattern=re.compile(r"a\sb") macth=pattern.match("a b") print macth.group() #a b #\S 非空白字符 [^\s] pattern=re.compile(r"a\Sb") macth=pattern.match("acb") print macth.group() #acb #\w 单词字符[a-z][A-Z][0-9] pattern=re.compile(r"a\wb") macth=pattern.match("a2b") print macth.group() #a2b #\W 非单词字符 pattern=re.compile(r"a\Wb") macth=pattern.match("a b") print macth.group() #a b

3.数量词

#encoding=utf-8 import re (1)#'*'匹配前一个字符 0次或者无限次 pattern=re.compile(r"abc*") match=pattern.match("ab") print match.group()#ab match=pattern.match("abccb") print match.group()#abcc (2)#'+'匹配前一个字符 1次或者无限次 pattern=re.compile(r"abc+") match=pattern.match("abccb") print match.group()#abcc (3)#'?'匹配前一个字符 0次或者1次 pattern=re.compile(r"abm?") match=pattern.match("abmm") print match.group()#abm (4)#{m}匹配前一个字符 m次 pattern=re.compile(r"abm{3}") match=pattern.match("abmmm") print match.group()#abmmm (5)#{m,n}匹配前一个字符 m~n次 m和n可以省掉,m省掉就是0~n次,n省掉m~无限次 pattern=re.compile(r"ab1{2,}") match=pattern.match("ab11111") print match.group()#ab11111

4.边界匹配

#encoding=utf-8 import re #'^'匹配字符串的开头 多行模式下每行的开头 pattern=re.compile(r"^ab") match=pattern.match("abc") print match.group() #ab #'$'匹配字符串的结束 多行模式下每行的结束 pattern=re.compile(r"abc$") match=pattern.match("abc") print match.group() #abc #'\A' 仅仅匹配以字符开头的 pattern=re.compile(r"\Aabc") match=pattern.match("abc") print match.group() #abc #'\Z' 仅仅匹配以字符开头的 pattern=re.compile(r"abc\Z") match=pattern.match("abc") print match.group() #abc #'\b' 匹配\w和\W之间 pattern=re.compile(r"a\b!bc") match=pattern.match("a!bc") print match.group() #a!bc #'\B' [^\b] pattern=re.compile(r"a\Bbc") match=pattern.match("abc") print match.group() #abc

5.逻辑分组

#encoding=utf-8 import re #'|' 代表左右表达公式任意匹配一个 #它总是先匹配左边,如果匹配成功就跳过右边 #如果|没被()包括默认是整个表达式 pattern=re.compile(r"abc|bcd") macth=pattern.match("abc") print macth.group() #abc #(...) #被括号扩起来的表达式作为分组,从表达式左侧开始每遇到分组( 编号+1 #分组表达式作为一个整体,后边可以跟量词,表达式中的|仅仅在改组中有效 pattern=re.compile(r"(abc|vbs)*") macth=pattern.match("abcabc") print macth.group() #abc #(?p<name>...) #分组除了原有的编号之外,额外制定也给别名 pattern=re.compile(r"(?P<zhang>abc)*") macth=pattern.match("abcabc") print macth.group() #abc #\<number> 应用编号为number到规则表达式中 pattern=re.compile(r"(abc)2\1") macth=pattern.match("abc2abc") print macth.group() #abc2abc #(?P=name) 引用别名为name到表达式中 pattern=re.compile(r"(?P<zhang>abc)2(?P=zhang)") macth=pattern.match("abc2abc") print macth.group() #abc2abc

6.re.match()

#encoding=utf-8 import re m=re.match(r"(\w+) (\w+)(?P<zhang>.*)","hello world!") #匹配时使用的文本。hello world! print m.string #匹配时使用的Pattern对象。<_sre.SRE_Pattern object at 0x10c915690> print m.re #文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同 print m.pos #0 #文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。 print m.endpos #14 #最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。 print m.lastindex #3 #最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。 print m.lastgroup #zhang #获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。 # group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时, # 返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串 print m.group(1,2) #('hello', 'world') #以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。 # default表示没有截获字符串的组以这个值替代,默认为None。 print m.groups() #('hello', 'world', '\xef\xbc\x81') #返回以有别名的组的别名为键、以该组截获的子串为值的字典, # 没有别名的组不包含在内。default含义同上。 print m.groupdict() #{'zhang': '\xef\xbc\x81'} #返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。 print m.start(2) #6 #返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。 print m.end(1)#5 #返回(start(group), end(group))。 print m.span(2)#(6, 11) #将匹配到的分组代入template中然后返回。template中可以使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。 # \id与\g<id>是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符'0',只能使用\g<1>0。 print m.expand(r"\g<2> \g<1>\3") #world hello!
转载请注明原文地址: https://www.6miu.com/read-1100225.html

最新回复(0)