python高级——正则表达式初解
正则表达式
1、什么是正则表达式
正则表达式也叫做匹配模式,它是由一组具有特定含义的字符串组成,通常用于匹配和替换文本。
正则表达式,它是一个独立的技术,也有很多编程语言都支持正则表达式的处理。
正则表达式的的作用有很多,在很多文本编辑器或其他工具中,正则表达式通常被用来检索和查找或替换那些符合某个模式的文本内容。在许多程序设计语言都支持利用正则表达式进行字符串操作。
2、我们为什么要学习正则表达式。
在软件开发过程中,经常会涉及到大量的关键字等各种字符的操作,使用正则表达式能够很大程度的简化开发复杂度和开发的效率,所以在python中,正则表达式在字符串的查询匹配操作中占据很重要的地位。
3、正则表达式的使用:
re模块:
导入模块:import re ——> dir(re)
python专门用于正则表达式的模块
<1>、re.compile( )
#compile用来编译正则表达式模式字符串,并生成Regular Expression Objects。
#flags有很多可选值:
àre.I(IGNORECASE)忽略大小写,括号内是完整的写法
àre.M(MULTILINE)多行模式,改变^和$的行为。
àre.S(DOTALL)点可以匹配任意字符,包括换行符。
àre.L(LOCALE)做本地化识别的匹配,不推荐使用。
àre.U(UNICODE)使用 \w \W \s \S \d \D使用取决于Unicode定义的字符属性。在python3中默认使用该flag。
àre.X(VERBOSE)冗长模式,该模式下pattern字符串可以是多行的,忽略空白字符,并且可以添加注释。
<2>、re.search( )
#执行正则表达式搜索并且在搜索结束后返回所匹配到的串,只返回第一次匹配到的结果。
#主要查看某些符号在不在字符串中,匹配到第一个就不匹配了。
<3>、re.findall( )
#匹配所有的对象,返回一个列表
<4>、re.finditer( )
#返回一个迭代器iterator,这个iterator yield match objects.返回顺序、内容和re.findall()相同。
<5>、re.match( )
#匹配的是以xxx开头的字符串。
<6>、re.sub( )
#实现查找替换
<7>、re.split()
#分割字符串,结果返回列表。
元字符:
· #正则表达式里匹配任意符号,除了换行符(\n),一个点匹配一个符号
\d #只匹配数字(0~9),不匹配字符,运算符,换行符等等。
\w #匹配有效符号。注意:在python3中中文属于有效字符,但是不建议用中文做变量名称。
\s #匹配的是空格位,如tab、\t、空格。
^ #匹配以什么什么开头。如所示re.match(“^jin.*”,”jinwei”)->匹配以jin开头
$ #匹配以什么什么结尾。
[ ] #范围例举。匹配在此范围内的一个(如果需要匹配的有效字符有连续性,则连续性是遵循ASCII码表的连续性,如a-z)
\D #匹配的不是数字
\W #匹配特殊符号,如:re.findall(“\W”,”jin@wei”)
\S #匹配非空白位。
[^] #匹配以非此字符外的字符,如re.findall(“[^jin]”,”jinwei”)à匹配出来的结果就是we
4、转义符
在python中,字符串的\有特殊含义,而且在正则表达式中,\也存在着特殊含义,这就意味着,在python中,使用正则表达式匹配一个\需要\\\\来匹配。
例如路径的匹配:
为了解决这样繁琐的问题,可在最前面加上r选项来进行简化:
建议:以后在写正则表达式时建议加上r。
5、贪婪与懒惰(位数)
在python中正则表达式默认是贪婪模式(个别语言中也可能是非贪婪模式),贪婪模式就是总会尝试匹配更多的字符。
非贪婪模正好与贪婪模式相反,非贪婪模式总是匹配尽可能少的字符。
在*、?、+、{m,n}后面加上?,可以将贪婪模式变为非贪婪模式。
* | 表示任意位0~n |
+ | 1~n位,至少有一位 |
? | 0或者1位 |
{n,} | 重复n次或者更多次 |
{n} | 重复n次 |
{n,m} | 重复n到m次 |
<1>、*
#表示任意位0~n
<2>、 +
#表示1~n位,至少有一位
<3>、?
#0或者1位
<4>、{n}
#重复n次
<5>、{n,}
#重复n次或者更多次
<6>、{n,m}
#重复n到m次