在处理正字符串的时候,经常会有一些复杂规则的字符串需求,
正则表表达式就是描述这些规则的公工具。
换句话说。
正则表达式就是记录文本规则的代码。
前几期讲了正则表表达式的一些概念,让我们具备正则表达式初步的印象,在python中使用re模块匹配字符串有match(),search(),findall()等方法。
今天我们首先来看看match()方法的使用。
使用match()方法匹配字符串
match()方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功。则返回Match()对象,否则则返回None。
它的语法格式如下:
re.match(pattern, strings, [flags])
参数:
pattern:表示模式字符串,由要匹配的正则表达式数转换而来
strings:表示需要匹配的字符串
flags:选择参数,用于控制匹配方式。如是否区分字母大小写等。
flags的参数一般如下:
re.I IGNORECASE, 忽略大小写的匹配模式
re.M MULTILINE, 使用本标志后,‘^’和‘$’匹配行首和行尾时,会增加换行符之前和之后的位置。
re.S DOTALL,此模式下 '.' 的匹配不受限制,可匹配任何字符,
包括换行符,也就是默认是不能匹配换行符
re.X VERBOSE,冗余模式, 此模式忽略正则表达式中的空白
和#号的注释
接下来咱们来看一组实例:
pattern = r'si\w+' #匹配字符串规则 string = 'Sixty school students seeing surprising sun snow scream, shout simultaneously' #要进行匹配的字符串 match_obj = re.match(pattern, string, re.I) #按照不区分大小写的方式进行匹配 print(match_obj) #<re.Match object; span=(0, 5), match='Sixty'> string = r'学生Sixty school students seeing surprising sun snow scream, shout simultaneously' match_obj = re.match(pattern, string, re.I) #按照不区分大小写的方式进行匹配 print(match_obj) #None
从上面的执行结果可以看出,字符串‘Sixty school students seeing surprising sun snow scream, shout simultaneously’是以si开头的,所以返回的是一个Match对象。
而下面的字符串'学生Sixty school students seeing surprising sun snow scream, shout simultaneously'不是以si开头的,所以返回的是None。
原因在上面已经说过了,因为match()方法从字符串的起始位置就开始匹配,如果第一个字符就不符合条件的话,就不再继续往下进行匹配,直接返回None。
Match对象中匹配值的位置和数据。当要获得匹配值的起始位置时可以使用Match对象的start()方法,同样当要获得匹配值的结束位置时可以使用Match对象的end()方法;
通过span()方法可以返回匹配位置的元组,通过string可以回去要匹配的字符串。
string = 'Sixty school students seeing surprising sun snow scream, shout simultaneously' #要进行匹配的字符串 match_obj = re.match(pattern, string, re.I) #按照不区分大小写的方式进行匹配 print('匹配值的起始位置', match_obj.start()) print('匹配值的结束位置', match_obj.end()) print('匹配位置的元组', match_obj.span()) print('要匹配的字符串', match_obj.string) print('匹配数据', match_obj.group()) #匹配值的起始位置 0 #匹配值的结束位置 5 #匹配位置的元组 (0, 5) #要匹配的字符串 Sixty school students seeing surprising sun snow scream, shout simultaneously #匹配数据 Sixty
这个实例是不是让你对上面所述概念有了一个更加清晰的认知呢?