热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

正则表达式正向查找不符合预期选项1:单个捕获组选项2:锚定到行的开头选项3:使用PyPiregex库

我正在尝试在python正则表达式中使用正向后缀来匹配此示例zpool输出中

我正在尝试在python正则表达式中使用正向后缀来匹配此示例zpool输出中的设备名称和序列号。我想我对后向语法不太了解,因为我无法匹配序列号。

我正在使用桌面上的Patterns应用程序对此进行沙箱处理。我还有其他一些关于后向断言的StackOverflow问题,但是我发现的东西似乎暗示着我处在正确的轨道上,到目前为止,我所看到的一切都没有清楚地表明我出了错。

pool ONLINE 0 0 0
raidz2-0 ONLINE 0 0 0
diskid/DISK-PK2331PAG6ZLMT ONLINE 0 0 0
da21 ONLINE 0 0 0
diskid/DISK-PK2331PAG6ZVMT ONLINE 0 0 0
diskid/DISK-PK2331PAG728ET ONLINE 0 0 0
diskid/DISK-PK2331PAG6YGXT ONLINE 0 0 0

我想获取第一组中的设备或序列号,以及第二组中的状态(ONLINE | AVAIL)。我正在使用的正则表达式是:

^\s+(da\d+|(?<=diskid/DISK-)\S+)\s+(ONLINE|AVAIL)\s

它与设备名称da21及其状态相匹配,但没有看到按序列号命名的设备。我对这种语法缺少什么?



为什么不起作用

让我们看一行,看看您的正则表达式匹配什么:

# your regex
^\s+(da\d+|(?<=diskid/DISK-)\S+)\s+(ONLINE|AVAIL)\s
# your string
diskid/DISK-PK2331PAG6ZLMT ONLINE 0 0 0
<# ^ assert position at start of string
^^^^ # \s+ match one or more whitespace characters
^! # da\d+ matches d,fails to match a,backtrack; try next alternation
<<<<# This fails because the text to the left of the position that the parser is at does
# not match diskid/DISK- (it's four spaces as was previously matched by \s+)



如何解决?

有多种正则表达式模式可以满足您要完成的任务:

选项1:单个捕获组

如果\S+之前是diskid/DISK-da\d+,则捕获到捕获组1,然后捕获ONLINEAVAIL到捕获组2。 / p>

((?<=diskid/DISK-)\S+|da\d+)\s+(ONLINE|AVAIL)\b

Pro:一个捕获组
缺点:无法确保第一个捕获组位于行的开头

选项2:锚定到行的开头

如果\S+之前是diskid/DISK-,则将da\d+捕获到捕获组1中,或者将ONLINE捕获到捕获组2中,然后将AVAIL^\s+(?:diskid/DISK-(\S+)|(da\d+))\s+(ONLINE|AVAIL)\b
捕获到捕获中第3组。

^\s+

Pro:停在行首-我们可以确保这是我们要匹配的数据(regex
缺点:两个捕获组(我们不能将两个不同的数据集和两个不同的条件集(用于将字符串添加到一个捕获组中)

选项3:使用PyPi regex

我们可以很容易地使用^\s+(?|diskid/DISK-(\S+)|(da\d+))\s+(ONLINE|AVAIL)\b
^ # same as option 2,but uses branch reset
库来完成此操作,从而使我们成为一组并声明其在字符串中的位置。

分支重置方法(交替产生一个捕获组,而不是两个):

name

推荐阅读
  • URL参数格式http:localhos:8080demo?ab&cd&ef匹配参数a对应的表达式为^a([^&]*)&匹配参数b对应的表达式为&b([^&]*)&匹配参数c对应 ... [详细]
  • 本文介绍了如何在Java中使用`JCheckBoxMenuItem.setMnemonic()`方法,并提供了多个实际应用的代码示例。 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • 我在尝试将组合框转换为具有自动完成功能时遇到了一个问题,即页面上的列表框也被转换成了自动完成下拉框,而不是保持原有的多选列表框形式。 ... [详细]
  • 数据输入验证与控件绑定方法
    本文提供了多种数据输入验证函数及控件绑定方法的实现代码,包括电话号码、数字、传真、邮政编码、电子邮件和网址的验证,以及报表绑定和自动编号等功能。 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • Web动态服务器Python基本实现
    Web动态服务器Python基本实现 ... [详细]
  • Python正则表达式(Python RegEx)
    Python正则表达式快速参考常用函数:re.match():从字符串的起始位置匹配一个正则表达式。re.search():扫描整个字符串并返回第一个成功的匹配。re.s ... [详细]
  • 本打算教一步步实现koa-router,因为要解释的太多了,所以先简化成mini版本,从实现部分功能到阅读源码,希望能让你好理解一些。希望你之前有读过koa源码,没有的话,给你链接 ... [详细]
  • java解析json转Map前段时间在做json报文处理的时候,写了一个针对不同格式json转map的处理工具方法,总结记录如下:1、单节点单层级、单节点多层级json转mapim ... [详细]
  • 本文介绍了Go语言中正则表达式的基本使用方法,并提供了一些实用的示例代码。 ... [详细]
  • 本文提供了一个Android应用中用于抓取网页信息并下载图片的示例代码。通过该代码,开发者可以轻松实现从指定URL获取网页内容及其中的图片资源。 ... [详细]
  • BeautifulSoup4 是一个功能强大的HTML和XML解析库,它能够帮助开发者轻松地从网页中提取信息。本文将介绍BeautifulSoup4的基本功能、安装方法、与其他解析工具的对比以及简单的使用示例。 ... [详细]
  • 本文简要介绍了如何使用 Python Elasticsearch DSL 进行基本和高级查询,包括连接 Elasticsearch、执行简单和复杂查询、聚合、排序及分页等。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
author-avatar
杭州琦琦妈_120
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有