Python正则表达式【1】

黄舟
发布: 2017-02-07 16:28:53
原创
1355 人浏览过

本文来说说Python的正则表达式。

废话不多说了,先开始最简单的:

'.':可以匹配除换行符以外的任意单个字符(就是个点)。

'*'可以匹配前面的子表达式零次或多次(就是个星号)。

所以上面两个的组合'.*'(点星)就是匹配除换行符以外的所有。

'+':重复一次或更多次。

'?':重复零次或一次。

'\d':匹配一个数字字符。等价于 [0-9]。

'\w'匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。

'/s'匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

'^'匹配输入字符串的开始位置。

'$'匹配输入字符串的结束位置。

上面这几个超级常用,当然常用的还有很多,需要的时候请查手册。

这样描述不够直观,直接敲实验。想在Python里使用正则表达式很简单,直接导入re即可:

>>> import re

>>>

先试试匹配所有:

>>> vlan = 'switchport access vlan 612'
>>> ljds = re.search('.*',vlan).group()
>>> ljds
'switchport access vlan 612'
登录后复制

再试试匹配数字:

>>> ljds = re.search('\d',vlan).group()
>>> ljds
'6'
登录后复制

因为'/d'是匹配一个数字,所以如果要匹配这里的‘612’,三个数字,可以加上'{3}':

>>> ljds = re.search('\d{3}',vlan).group()
>>> ljds
登录后复制

'612'

同理,如果要匹配13个字符(包括空格):

>>> ljds = re.search('[\w\s]{13}',vlan).group()
>>> ljds
'switchport ac'
登录后复制

这里还想提一下正则表达式的量词里面涉及到贪婪和非贪婪模式,贪婪就是取最大值,尽可能多的匹配。非贪婪就正好相反(默认是贪婪模式)。举例说明:

刚才上面是匹配13个字符,如果写成匹配2到10个字符就写成:'[\w\s]{2,10}'即可,那么到底匹配的是2个还是10个呢?因为默认是贪婪模式,它会最大的匹配:

>>> ljds = re.search('[\w\s]{2,10}',vlan).group()
>>> ljds
'switchport'
登录后复制

在量词后面加个问号'?',就切换到了非贪婪模式,即最小匹配:

>>> ljds = re.search('[\w\s]{2,10}?',vlan).group()
>>> ljds
'sw'
登录后复制

接下来介绍一下“捕获”了:

(exp):匹配exp。

(?=exp):匹配exp前面的位置。

(?<=exp):匹配exp后面的位置。

>>> vlan = 'switchport access vlan 612'

最基础的:

>>> ljds = re.search(&#39;(access)&#39;,vlan).group()
>>> ljds
&#39;access&#39;
登录后复制

匹配'access'之前的任意字符:

>>> ljds = re.search(&#39;.*(?=access)&#39;,vlan).group()
>>> ljds
&#39;switchport &#39;
登录后复制

匹配'vlan'之后的任意字符:

>>> ljds = re.search(&#39;(?<=vlan).*&#39;,vlan).group()
>>> ljds
&#39; 612&#39;
登录后复制

OK,学到这里,再看看之前捕获路由器名称的正则表达式:

DeviceName = re.search(&#39;.*(?=#show run)&#39;,telreply).group()
登录后复制

以上就是Python正则表达式【1】的内容,更多相关内容请关注PHP中文网(www.php.cn)!


相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板