首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >红宝石扫描法

红宝石扫描法
EN

Stack Overflow用户
提问于 2021-09-24 23:58:48
回答 2查看 203关注 0票数 0

嗨,我正试图用扫描方法解析这个字符串

代码语言:javascript
复制
test = "Disk/File System/[/dev/mapper/rhel-var (/var)]/MB free=14791, Disk/File System/[/dev/mapper/rhel-home (/home)]/MB free=9451, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/percent full=1.0"

我必须捕获路径:/dev/mapper/rhel-var (/var)和百分比上的数字:1.0

我试过很多次,但我可以让它开始工作。

代码语言:javascript
复制
testa = test.gsub(',', '')
r = testa.scan(/Disk\/File System\/\[((.*))\]\/percent full=([^[:space:]]+)/)
puts r

--编辑--

字符串可以具有FS的多个ocurrence和百分比:

代码语言:javascript
复制
test = "Disk/File System/[/dev/mapper/rhel-var (/var)]/MB free=14791, Disk/File System/[/dev/mapper/rhel-home (/home)]/MB free=9451, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/percent full=1.0, Disk/File System/[/dev/sda2 (/boot)]/MB total=1974, Disk/File System/[/dev/mapper/rhel-home (/home)]/MB total=10015, Disk/File System/[/dev/mapper/rhel-root (/)]/percent full=61.0, Disk/File System/[/dev/mapper/rhel-var (/var)]/percent full=23.0, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB total=452543, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB free=426145, Disk/File System/[/dev/mapper/rhel-root (/)]/MB total=10015, Disk/File System/[/dev/mapper/rhel-root (/)]/MB free=3717, Disk/File System/[/dev/mapper/rhel-var (/var)]/MB total=20030, Disk/File System/[/dev/sda2 (/boot)]/percent full=9.0, Disk/File System/[/dev/sda2 (/boot)]/MB free=1699, Disk/File System/[/dev/mapper/rhel-home (/home)]/percent full=1.0, Disk/File System/[devtmpfs (/dev)]/MB total=3851, Disk/File System/[devtmpfs (/dev)]/percent full=0.0, Disk/File System/[devtmpfs (/dev)]/MB free=3851"

帮帮忙,谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-25 00:27:07

您可以使用

代码语言:javascript
复制
/Disk\/File System\/\[([^\]\[]*)\]\/percent full=(\d+(?:\.\d+)?)/

Rubular演示 (regex101演示)。详细信息

  • Disk\/File System\/\[ -一个Disk/File System/[字符串
  • ([^\]\[]*) -第1组:除[]以外的任何零或多个字符,尽可能多
  • \]\/percent full= -一个]/percent full=文本
  • (\d+(?:\.\d+)?) -第2组:一个或多个数字,然后是一个可选的.序列和一个或多个数字。

在Ruby中

代码语言:javascript
复制
test = "Disk/File System/[/dev/mapper/rhel-var (/var)]/MB free=14791, Disk/File System/[/dev/mapper/rhel-home (/home)]/MB free=9451, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/percent full=1.0, Disk/File System/[/dev/sda2 (/boot)]/MB total=1974, Disk/File System/[/dev/mapper/rhel-home (/home)]/MB total=10015, Disk/File System/[/dev/mapper/rhel-root (/)]/percent full=61.0, Disk/File System/[/dev/mapper/rhel-var (/var)]/percent full=23.0, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB total=452543, Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB free=426145, Disk/File System/[/dev/mapper/rhel-root (/)]/MB total=10015, Disk/File System/[/dev/mapper/rhel-root (/)]/MB free=3717, Disk/File System/[/dev/mapper/rhel-var (/var)]/MB total=20030, Disk/File System/[/dev/sda2 (/boot)]/percent full=9.0, Disk/File System/[/dev/sda2 (/boot)]/MB free=1699, Disk/File System/[/dev/mapper/rhel-home (/home)]/percent full=1.0, Disk/File System/[devtmpfs (/dev)]/MB total=3851, Disk/File System/[devtmpfs (/dev)]/percent full=0.0, Disk/File System/[devtmpfs (/dev)]/MB free=3851"
rx = /Disk\/File System\/\[([^\]\[]*)\]\/percent full=(\d+(?:\.\d+)?)/
puts test.scan(rx)

输出:

代码语言:javascript
复制
[
   ["/dev/mapper/rhel-opt (/opt)", "1.0"],
   ["/dev/mapper/rhel-root (/)", "61.0"],
   ["/dev/mapper/rhel-var (/var)", "23.0"],
   ["/dev/sda2 (/boot)", "9.0"],
   ["/dev/mapper/rhel-home (/home)", "1.0"],
   ["devtmpfs (/dev)", "0.0"]
]
票数 0
EN

Stack Overflow用户

发布于 2021-09-25 08:07:32

我将按如下方式编写字符串,以澄清其结构。

代码语言:javascript
复制
test = "Disk/File System/[/dev/mapper/rhel-var (/var)]/MB free=14791," +
       "Disk/File System/[/dev/mapper/rhel-home (/home)]/MB free=9451," +
       "Disk/File System/[/dev/mapper/rhel-opt (/opt)]/percent full=1.0," +
       "Disk/File System/[/dev/sda2 (/boot)]/MB total=1974," +
       "Disk/File System/[/dev/mapper/rhel-home (/home)]/MB total=10015, " +
       "Disk/File System/[/dev/mapper/rhel-root (/)]/percent full=61.0," +
       "Disk/File System/[/dev/mapper/rhel-var (/var)]/percent full=23.0, " +
       "Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB total=452543, " +
       "Disk/File System/[/dev/mapper/rhel-opt (/opt)]/MB free=426145," +
       "Disk/File System/[/dev/mapper/rhel-root (/)]/MB total=10015," +     
       "Disk/File System/[/dev/mapper/rhel-root (/)]/MB free=3717," +
       "Disk/File System/[/dev/mapper/rhel-var (/var)]/MB total=20030," +
       "Disk/File System/[/dev/sda2 (/boot)]/percent full=9.0," +
       "Disk/File System/[/dev/sda2 (/boot)]/MB free=1699," +
       "Disk/File System/[/dev/mapper/rhel-home (/home)]/percent full=1.0, " +
       "Disk/File System/[devtmpfs (/dev)]/MB total=3851, " +
       "Disk/File System/[devtmpfs (/dev)]/percent full=0.0, " +
       "Disk/File System/[devtmpfs (/dev)]/MB free=3851"

我假设您希望提取所有对路径和“百分比满”值,而不考虑后面没有“百分比满”的路径。

你可以写

代码语言:javascript
复制
r = /\bDisk\/File System\/\[([^\]]+)\]\/percent full=(\d+\.\d)/
代码语言:javascript
复制
test.scan(r)
  #=> [["/dev/mapper/rhel-opt (/opt)", "1.0"],
  #    ["/dev/mapper/rhel-root (/)", "61.0"],
  #    ["/dev/mapper/rhel-var (/var)", "23.0"],
  #    ["/dev/sda2 (/boot)", "9.0"],
  #    ["/dev/mapper/rhel-home (/home)", "1.0"],
  #    ["devtmpfs (/dev)", "0.0"]]

正则表达式可以以自由间隔模式编写,以使其自文档化。

代码语言:javascript
复制
r = /
    \b                     # assert a word break
    Disk\/File System\/\[  # match a string
    ([^\]]+)               # match 1 or more chars other than ']',
                           #   saved to capture group 1
    \]\/percent[ ]full=    # match a string
    (\d+\.\d)              # match one or more digits followed by '.', followed
                           #   by one digit, saved to capture group 2 
    /x                     # invoke free-spacing regex definition mode

请注意,在自由间距模式下,如果表达式没有以某种方式受到保护,则在解析表达式之前,percentfull之间的空间将被删除。就像我所做的那样,将字符类中的空间围起来是几种方法之一。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69322106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档