欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

Python正则表达式【1】

程序员文章站 2022-04-11 16:42:12
...
本文来说说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('(access)',vlan).group()
>>> ljds
'access'

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

>>> ljds = re.search('.*(?=access)',vlan).group()
>>> ljds
'switchport '

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

>>> ljds = re.search('(?<=vlan).*',vlan).group()
>>> ljds
' 612'

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

DeviceName = re.search('.*(?=#show run)',telreply).group()

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