python-3.x - 使用前瞻的正则表达式模式
问题描述
我正在尝试查找地址行,后面是接口行,例如
interface
ip address a.a.a.a
解决方案
如果要匹配包含类似格式的 ip 地址的多行,一种选择是使用PyPi 正则表达式模块和\G
锚点。
要获得更精确的 IP 地址模式,请参阅https://www.regular-expressions.info/ip.html
(?:^interface Vlan\r?\n\s*description .*\r?\n|\G(?!\A))\s*(ip address \d{1,3}(?:\.\d{1,3}){3})
在零件
(?:
轮换的非捕获组^interface Vlan
从行首逐字匹配\r?\n\s*description .*\r?\n
匹配换行符、描述和行的其余部分|
或者\G(?!\A)
在上一场比赛中断言位置,而不是在开始时
)
关闭组\s*
匹配 0+ 个空白字符(
捕获组 1ip address \d{1,3}
匹配ip address
和 1-3 位数字(?:\.\d{1,3}){3}
重复 3 次匹配一个点和 1-3 个数字
)
关闭组
示例代码
import regex
pattern = r"(?:^interface Vlan\r?\n\s*description .*\r?\n|\G(?!\A))\s*(ip address \d{1,3}(?:\.\d{1,3}){3})"
test_str = ("interface\n"
" description xxxxxxx\n"
" ip address 127.0.0.1\n"
"!\n"
"interface Vlan\n"
" description xxxxx\n"
" ip address 127.0.0.2\n"
" ip address 127.0.0.3\n"
" no abcd xxxxx eeeee\n"
"!")
print(regex.findall(pattern, test_str, regex.MULTILINE))
输出
['ip address 127.0.0.2', 'ip address 127.0.0.3']
推荐阅读
- php - 如何获取在 MySQL 中创建的生成外键以用于插入函数
- assembly - 我的程序集为 int 分配了两个数字并想要打印它。但是运行时,它说分段错误?
- image - 上传路径在多个上传文件和图像上似乎无效
- python-3.x - TypeError:'int'对象不可调用-1
- javascript - 使用 Javascript ajax 异步更新数据失败
- javascript - 如何在 appmaker 中打印表单?
- angular - 如何使用 ngx-formly 为 2 个字段组制作自定义包装器?
- mysql - 每个类型的每个引用的前 5 行总和,其他所有等于 1,按团队 ID 分组
- xamarin.ios - 未在 Xamarin.IOS 中创建 IPA 文件
- java - 在为 com.ktech:xpira:jar:0.0.1-SNAPSHOT 构建有效模型时遇到了一些问题