.net - 正则表达式匹配多行字符串中的字符串
问题描述
我在文本文件中有一些字符串。
line con 0
session-timeout 10
exec-timeout 10 0
privilege level 15
logging synchronous
login authentication console-in
transport preferred none
stopbits 1
line vty 0 4
session-timeout 30
exec-timeout 30 0
logging synchronous
transport preferred none
transport input ssh
transport output ssh
line vty 5 15
session-timeout 10
exec-timeout 10 0
logging synchronous
transport preferred none
transport input ssh
transport output ssh
我正在尝试查找/匹配
session-timeout 10
exec-timeout 10
只能在line con 0
with Regex下。
line con 0.*\n(.*\n)*.*session-timeout 10.*\n(.*\n)*.*exec-timeout 10
也会赶上
vty 5 15
session-timeout 10
exec-timeout 10
有没有办法做得更好?
解决方案
如果 2 行session-timeout 10
应该exec-timeout 10
按该顺序出现,则可以使用 2 个捕获组。
每个捕获组值,确保它前面的行也不会交叉匹配line
,例如 session-
对于第一个匹配和 exec-
第二个匹配,使用负前瞻。
^line con 0(?:\r?\n(?!line | session-).*)*\r?\n[\p{Zs}\t]*(session-timeout 10).*(?:\r?\n(?!line| exec-).*)*\r?\n[\p{Zs}\t]*(exec-timeout 10)\b
^
字符串的开始line con 0
从字面上匹配(?:\r?\n(?!line | session-).*)*
匹配所有不以line
or开头的行session-
\r?\n[\p{Zs}\t]*
匹配换行符和可选空格或制表符(session-timeout 10)
捕获组 1,逐字匹配(或用于[0-9]+
匹配 1+ 位).*
匹配该行的其余部分(?:\r?\n(?!line| exec-).*)*
匹配所有不以line
or开头的行exec-
\r?\n[\p{Zs}\t]*
匹配换行符和可选空格或制表符(exec-timeout 10)
捕获组 2,逐字匹配\b
防止部分匹配的单词边界
查看regex 101 演示和.NET regex 演示(单击“表”选项卡查看组)
推荐阅读
- sql - 按日期字段从表中获取用户
- c - 我如何找到给定程序的中位数
- python - 每次测试后烧瓶单元测试不关闭端口
- c# - Selenium C# 文件上传不适用于 JavaScript Executor 和 SendKeys
- html - 反应路由器链接包装div背景不显示
- javascript - 如何在浏览器中运行 TypeScript 编译后的 JS 文件?
- macos - 一种从 Mac 上的 .net 框架版本指定 msbuild 的方法?
- php - 在 PHP 中从 txt.file 解析十六进制数据
- sql - 获取特定数据库的 SQL Server 执行查询历史
- typescript - ts-node 没有拾取 d.ts 文件,但 tsc 编译工作正常