嗨,我正试图用扫描方法解析这个字符串
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
我试过很多次,但我可以让它开始工作。
testa = test.gsub(',', '')
r = testa.scan(/Disk\/File System\/\[((.*))\]\/percent full=([^[:space:]]+)/)
puts r--编辑--
字符串可以具有FS的多个ocurrence和百分比:
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"帮帮忙,谢谢
发布于 2021-09-25 00:27:07
您可以使用
/Disk\/File System\/\[([^\]\[]*)\]\/percent full=(\d+(?:\.\d+)?)/见Rubular演示 (regex101演示)。详细信息
Disk\/File System\/\[ -一个Disk/File System/[字符串([^\]\[]*) -第1组:除[和]以外的任何零或多个字符,尽可能多\]\/percent full= -一个]/percent full=文本(\d+(?:\.\d+)?) -第2组:一个或多个数字,然后是一个可选的.序列和一个或多个数字。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)输出:
[
["/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"]
]发布于 2021-09-25 08:07:32
我将按如下方式编写字符串,以澄清其结构。
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"我假设您希望提取所有对路径和“百分比满”值,而不考虑后面没有“百分比满”的路径。
你可以写
r = /\bDisk\/File System\/\[([^\]]+)\]\/percent full=(\d+\.\d)/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"]]正则表达式可以以自由间隔模式编写,以使其自文档化。
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请注意,在自由间距模式下,如果表达式没有以某种方式受到保护,则在解析表达式之前,percent和full之间的空间将被删除。就像我所做的那样,将字符类中的空间围起来是几种方法之一。
https://stackoverflow.com/questions/69322106
复制相似问题