Python正则表达式基础

限定符说明
[]匹配方括号内的任意1个或者多个字符
[-]匹配方括号内的范围内的任意字符
[^]匹配方括号内单个字符之外的任意字符,不能实现不匹配字符串
a|b匹配字符a或者b
()匹配圆括号内的表达式

预定义说明
.匹配除了换行符"\n"之外的任意字符
\d匹配0-9之间任意字符,相当于 [0-9]
\D匹配0-9之外任意字符,相当于 [^0-9]
\w匹配任意字母、数字、下划线,相当于 [a-zA-Z0-9]
\W匹配除了字母、数字、下划线之外的字符,相当于 [^a-zA-Z0-9]
\s匹配空格、换行、制表符,相当于 [\t\r\n\v\f]
\S匹配除了空格、换行、制表符之外的字符,相当于 [^\t\r\n\v\f]
\n匹配换行符 linefeed
\r匹配回车符 carriage return
\t匹配制表符 tab
\v匹配垂直制表符 vertical return

数量限定符说明
+紧跟它前面的字符,匹配 1 或者 更多次
?紧跟它前面的字符,匹配 0 或者 1次
*紧跟它前面的字符,匹配 0 或者 更多次
{n}匹配n次
{n,}匹配n次或者更多次
{n,m}匹配n到m次

位置限定符说明举例
^匹配行首
$匹配行尾
\<匹配单子开头的位置\<th  匹配 this  但是不配 ethernet
\>匹配单子结尾的位置\>er  匹配 father  但是不配 ethernet
/b匹配单子开头或结尾的位置/bat/b 匹配  at  但是不匹配 atexit cat batch  
/B不匹配单子开头或结尾的位置/Bat/B 匹配  batch  但是不匹配 attend  hat

Python脚本举例1:

在设备配置文件中想要匹配出如下配置段,但是vsi的名称需要fbb开头,但是不能包含oam

#
vsi fbb_service
 description ** 123 **
 pwsignal ldp
  vsi-id 12345678
  peer 1.2.3.4
  peer 1.2.3.4 pw abc
  peer 1.2.3.5
  peer 1.2.3.5 pw bcd
 tnl-policy TE
 isolate spoken include-multicast
#

就可以使用如下正则表达式:

import re
#
s = '^#$\n' + '^vsi fbb((?!oam)[^\n])*$\n' + '(^([^#])*$\n)+' + '^#$\n'
re_vsi_fbb_conf = re.compile(s, re.I | re.S | re.M)
#

解释如下:

   1.  ^#$\n 匹配第一行的#号:

            ^匹配行首,$匹配行尾,\n匹配换行

    2. ^vsi fbb((?!oam)[^\n])*$\n 匹配第二行vsi fbbxxxxx,但是xxxxx内不能包含oam这个字符串:

            (?!oam) 逆向查找不能包含oam,[^\n]不匹配换行,()*匹配括号内表达式0次或多次

    3. (^([^#])*$\n)+ 匹配一行或者多行,但是不匹配#号:

            ([^#])* 匹配除了#号的任意字符0次或者多次,^匹配行首,$匹配行尾,\n匹配换行

            ()+ 匹配括号内表达式1次或多次

    4. ^#$\n 匹配最后一行的#号:

            ^匹配行首,$匹配行尾,\n匹配换行

    5. Python re 正则表达式的修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志

修饰符描述
re.I使匹配对大小写不敏感
re.L做本地化识别(locale-aware)匹配
re.M多行匹配,影响 ^ 和 $
re.S使 . 匹配包括换行在内的所有字符
re.U根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X给予你更灵活的格式以便你将正则表达式写得更易于理解

Python脚本举例2:

在设备配置文件中想要匹配出某一行以vsi fbb开头的,就可以使用如下正则表达式:

#
s = '^vsi fbb([^\n])*$\n'
re_vsi_fbb = re.compile(s, re.I | re.S | re.M)
#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值