本文共 2082 字,大约阅读时间需要 6 分钟。
一、正则表达式. 任何单个字符 [] 字符集。比如[abc]表示a、b、c [^ ] 非字符集。比如[^abc]表示不是a或b或c的字符 \d 数字。等价于[0-9] \w 单词字符。等价于[A-Za-z0-9_]
二、re库2.1 常用函数#查找 re.findall(pattern, string, flags=0) #搜索所有匹配结果,返回列表的形式。找不到,则返回空列表。 re.search(pattern, string, flags=0) #搜索第一个匹配的结果。返回的是Match对象。 re.match(pattern, string, flags=0) #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。 re.finditer(pattern, string, flags=0) #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。
#替换 re.sub(pattern, repl, string, count=0, flags=0) #类似于字符串中的replace方法。替换。在string中匹配pattern,然后替换成repl。
#切分 re.split(pattern, string, maxsplit=0, flags=0) #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。
2.1.1 re.findall()re.findall(pattern, string, flags=0) #搜索所有匹配结果,返回列表的形式【例1】。找不到,则返回空列表。【例2】
参数flags如下: 常用的就是re.I,可以忽略大小写。【例3】
【例1】 结果:
【例2】
结果:
【例3】
结果:
2.1.2 re.search()re.search(pattern, string, flags=0) #搜索第一个匹配的结果。返回的是Match对象【例1】。如果匹配不到,则返回None.【例2】
Match对象是一次匹配的结果,包含匹配的很多信息:
【例1】
结果:
【例2】
结果:
2.1.3 re.match()re.match(pattern, string, flags=0) #类似于字符串中的startwith方法。搜索开头是不是匹配。返回的是Match对象。【例1】
例1:
结果:
2.1.4 re.finditer()re.finditer(pattern, string, flags=0) #搜索所有匹配的结果。返回一个迭代器,遍历迭代器可以得到一个个Match对象。【例1】
例1:
结果:
2.1.5 re.sub()re.sub(pattern, repl, string, count=0, flags=0) #类似于字符串中的replace方法,返回替换后的字符串。【例1】
pattern:要替换的串 repl: 替换成的串 string: 待匹配的字符串 count: 匹配的最大替换次数。【例2】
例1: 结果:
例2:
结果:
2.1.6 re.split()re.split(pattern, string, maxsplit=0, flags=0) #类似于字符串中的split方法,都是将一个字符串拆分成子字符串的列表。【例1】【例2】
maxsplit: 最大分割数,剩余部分作为最后一个元素输出。
例1:
结果:
例2:
结果: !和空格中间有一个空字符。
例3:
结果:
2.2 re库的另一种用法2.1中是直接使用函数。但是还有一种方法更常用,就是首先使用re.compile()函数,将正则表达式的字符串形式编译成正则表达式对象,然后再使用这个对象的函数。 这样的话,就可以一次编译,多次操作。更好一点。
步骤一:regex = re.compile(pattern, flags=0) 步骤二:调用regex的方法,有:
例:
结果:
2.3 贪婪匹配如果同时匹配到长度不同的多项,返回哪一个呢? Re库默认采用贪婪匹配,即输出匹配最长的子串。【例1】【例3】
如何输出最短的子串呢?【例2】【例3】
• 只要长度输出可能不同的,都可以通过在操作符后增加?变成最小匹配
例1:
结果:
例2:
结果:
例3:
结果:
2.4 分组分组就是用一对圆括号“()”括起来的正则表达式,匹配出的内容就表示一个分组。从正则表达式的左边开始看,看到的第一个左括号“(”表示第一个分组,第二个表示第二个分组,依次类推,需要注意的是,有一个隐含的全局分组(就是0),就是整个正则表达式。
注意:group(0)是整个匹配的结果,也就是不分组时的结果。 group(1)才是第一组的结果。 groups()是所有组的结果,放到了一个元组中。
例如:如果想把区号从匹配的电话号码中分离,可以添加括号在正则表达式中创建分组,再使用group()方法,从一个分组中获取匹配的文本。
结果:
|
转载地址:http://xqown.baihongyu.com/