正则表达式匹配所有内容_Python正则表达式
什么是正则表达式
·正则表达式是字符串处理的有⼒⼯具,⽐字符串⾃⾝提供的⽅法提供了更强⼤的处理功能。
判断⼀个字符串是否是合法的Email地址,可以通过构造⼀个规则(正则表达式),去判断字符串是否能够匹配。
·例如判断⼀个字符串是否是合法的Email地址
正则表达式,⼜称正规表⽰式、正规表⽰法、正规表达式、规则表达式、常规表⽰法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的⼀个概念。
正则表达式使⽤单个字符串来描述、匹配⼀系列匹配某个句法规则的字符串。
在很多⽂本编辑器⾥,正则表达式通常被⽤来检索、替换那些匹配某个模式的⽂本
元字符
⼀、导⼊re库
python使⽤正则表达式要导⼊re库。
import re
Python通过re模块提供对正则表达式的⽀持。
使⽤re的⼀般步骤是先将正则表达式的字符串形式编译为Pattern实例然后使⽤Pattern实例处理⽂本并获得匹配结果(⼀个Match实例)最后使⽤Match实例获得信息,进⾏其他的操作
re.match函数
匹配成功re.match⽅法返回⼀个匹配的对象
使⽤group(num) 或 groups() 匹配对象函数来获取匹配表达式
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None
⽽re.search匹配整个字符串,直到到⼀个匹配
compile 函数
compile 函数⽤于编译正则表达式,⽣成⼀个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使⽤findall
在字符串中到正则表达式所匹配的所有⼦串,并返回⼀个列表,如果没有到匹配的,则返回空列表。
注意: match 和 search 是匹配⼀次 findall 匹配所有。
注意:
string 待匹配的字符串。
·string
pos 可选参数,指定字符串的起始位置,默认为 0。
·pos
endpos 可选参数,指定字符串的结束位置,默认为字符串的长度
·endpos
findall
re.finditer
在字符串中到正则表达式所匹配的所有⼦串,并把它们作为⼀个迭代器返回
re.finditer(pattern, string, flags=0)
re.split
split ⽅法按照能够匹配的⼦串将字符串分割后返回列表,它的使⽤形式如下
re.split(pattern, string[, maxsplit=0, flags=0])
re.sub
sub(pattern, repl, string, count=0, flags=0)
替换函数,将正则表达式 pattern 匹配到的字符串替换为 repl 指定的字符串, 参数 count ⽤于指定最⼤
替换次数
贪婪 vs 不贪婪
当重复⼀个正则表达式时,如⽤ a*,操作结果是尽可能多地匹配模式。 .* 的本质是“贪婪”的
在这种情况下,解决⽅案是使⽤不贪婪的限定符 *?、+?、?? 或 {m,n}?,尽可能匹配⼩的⽂本
⼆、使⽤正则表达式步骤
1、寻规律;
2、使⽤正则符号表⽰规律;
3、提取信息,如果每⼀个字符都能匹配,则匹配成功;⼀旦有匹配不成功的字符则匹配失败
三、正则表达式中常见的基本符号
1.点号“.”
⼀个点号可以代替除了换⾏符(n)以外的任何⼀个字符,包括但不限于英⽂字母、数字、汉字、英⽂标点符号和中⽂标点符号。
2.星号“*”
⼀个星号可以表⽰它前⾯的⼀个⼦表达式(普通字符、另⼀个或⼏个正则表达式符号)0次到⽆限次。
3.问号“?”
问号表⽰它前⾯的⼦表达式0次或者1次。注意,这⾥的问号是英⽂问号。
4.反斜杠“”
反斜杠在正则表达式⾥⾯不能单独使⽤,甚⾄在整个Python⾥都不能单独使⽤。反斜杠需要和其他的字符配合使⽤来把特殊符号变成普通符号,把普通符号变成特殊符号。如:“n”。
5.数字“d”
正则表达式⾥⾯使⽤“d”来表⽰⼀位数字。再次强调⼀下,“d”虽然是由反斜杠和字母d构成的,但是要把“d”看成⼀个正则表达式符号整体。
6.⼩括号“()”
⼩括号可以把括号⾥⾯的内容提取出来。
四、常见的正则表达式举例
1. .*?(匹配所有内容)
例如:'<title>(.*?)</title>' 将⽹页的标题爬取下来。
正则表达式获取括号内容2、w 单词字符[A-Za-z0-9_], "+" 匹配前⼀个字符1次或⽆限次 例如:⼀个⼈的邮箱是这样的lixiaomei@qq,那么我们如何从⼀⼤堆的字符串把它提取出来呢?
pattern: w+@w+
代表了匹配0次或者1次括号分组内的匹配内容,"()"则表⽰被括内容是⼀个分组,分组序号从pattern字符串起始往后依次排列。因为是匹配0次或1次,那么就意味着括号内的部分是可有可⽆的,所以这个pattern就可能匹配以上两种邮箱格式。
扩展: w+@(w+.)*w+ 模式就更厉害了," * " 可以匹配0次或⽆限次。
五、re库的核⼼函数
compile()函数 (可有可⽆)
函数定义: compile(pattern, flag=0)
函数描述:编译正则表达式pattern,然后返回⼀个正则表达式对象。
为什么要对pattern进⾏编译呢?《Python核⼼编程》⾥⾯是这样解释的:
使⽤预编译的代码对象⽐直接使⽤字符串要快,因为解释器在执⾏字符串形式的代码前都必须把字符串编译成代码对象。
2、match()函数
函数定义: match(pattern, string, flag=0)
函数描述:只从字符串的最开始与pattern进⾏匹配,匹配成功返回匹配对象(只有⼀个结果),否则返回None。
问题来了,为什么result1结果有这么多的东西啊?貌似最后⼀个才是要匹配的对象。这个要怎么提取出来呀?
别着急,我们现在得到的是匹配对象,需要⽤⼀定的⽅法提取,后⾯会在《匹配对象的⽅法》章节来解决这个问题,继续往下看。
3、search()函数
函数定义: search(pattern, string, flag=0)
函数描述:与match()⼯作的⽅式⼀样,但是search()不是从最开始匹配的,⽽是从任意位置查第⼀次匹配的内容。如果所有的字串都没有匹配成功,返回None,否则返回匹配对象。
4、findall()函数
函数定义: findall(pattern, string [,flags])

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。