正则(regular),要使用正则表达式需要导入Python中的re(regular正则的缩写)模块。正则表达式是对字符串的处理,我们知道,字符串中有时候包含很多我们想要提取的信息,掌握这些处理字符串的方法,能够方便很多我们的操作。
正则表达式(regular),处理字符串的方法。
正则是一种常用的方法,因为python中文件处理很常见,文件里面包含的是字符串,要想处理字符串,那么就需要用到正则表达式。因而要掌握好正则表达式。下面下来看看正则表达式中包含的方法:
(1)match(pattern, string, flags=0)
def match(pattern, string, flags=0): """Try to apply the pattern at the start of the string, returning a match object, or None if no match was found.""" return _compile(pattern, flags).match(string)
从上面注释:Try to apply the pattern at the start of the string,returning a match object,or None if no match was found.从字符串的开头开始查找,返回一个match object对象,如果没有找到,返回一个None。
重点:(1)从开头开始查找;(2)如果查找不到返回None。
下面来看看几个实例:
import re string = "abcdef" m = re.match("abc",string) (1)匹配"abc",并查看返回的结果是什么 print(m) print(m.group()) n = re.match("abcf",string) print(n) (2)字符串不在列表中查找的情况 l = re.match("bcd",string) (3)字符串在列表中间查找情况 print(l)
运行结果如下:
<_sre.SRE_Match object; span=(0, 3), match='abc'> (1)abc (2) None (3) None (4)
从上面输出结果(1)可以看出,使用match()匹配,返回的是一个match object对象,要想转换为看得到的情况,要使用group()进行转换(2)处所示;如果匹配的正则表达式不在字符串中,则返回None(3);match(pattern,string,flag)是从字符串开始的地方匹配的,并且只能从字符串的开始处进行匹配(4)所示。
(2)fullmatch(pattern, string, flags=0)
def fullmatch(pattern, string, flags=0): """Try to apply the pattern to all of the string, returning a match object, or None if no match was found.""" return _compile(pattern, flags).fullmatch(string)
从上面注释:Try to apply the pattern to all of the string,returning a match object,or None if no match was found...
(3)search(pattern,string,flags)
def search(pattern, string, flags=0): """Scan through string looking for a match to the pattern, returning a match object, or None if no match was found.""" return _compile(pattern, flags).search(string) search(pattern,string,flags)的注释是Scan throgh string looking for a match to the pattern,returning a match object,or None if no match was found.在字符串任意一个位置查找正则表达式,如果找到了则返回match object对象,如果查找不到则返回None。
重点:(1)从字符串中间任意一个位置查找,不像match()是从开头开始查找;(2)如果查找不到则返回None;
import re string = "ddafsadadfadfafdafdadfasfdafafda" m = re.search("a",string) (1)从中间开始匹配 print(m) print(m.group()) n = re.search("N",string) (2)匹配不到的情况 print(n)
运行结果如下:
<_sre.SRE_Match object; span=(2, 3), match='a'> (1)a (2)None (3)
从上面结果(1)可以看出,search(pattern,string,flag=0)可以从中间任意一个位置匹配,扩大了使用范围,不像match()只能从开头匹配,并且匹配到了返回的也是一个match_object对象;(2)要想展示一个match_object对象,那么需要使用group()方法;(3)如果查找不到,则返回一个None。
(4)sub(pattern,repl,string,count=0,flags=0)
def sub(pattern, repl, string, count=0, flags=0): """Return the string obtained by replacing the leftmost non-overlapping occurrences of the pattern in string by the replacement repl. repl can be either a string or a callable; if a string, backslash escapes in it are processed. If it is a callable, it's passed the match object and must return a replacement string to be used.""" return _compile(pattern, flags).sub(repl, string, count) sub(pattern,repl,string,count=0,flags=0)查找替换,就是先查找pattern是否在字符串string中;repl是要把pattern匹配的对象,就要把正则表达式找到的字符替换为什么;count可以指定匹配个数,匹配多少个。示例如下: import re string = "ddafsadadfadfafdafdadfasfdafafda" m = re.sub("a","A",string) #不指定替换个数(1) print(m) n = re.sub("a","A",string,2) #指定替换个数(2) print(n) l = re.sub("F","B",string) #匹配不到的情况(3) print(l)
运行结果如下: