如何使用Regex.split显示指定的字符串?
How can I use Regex.split to display a specified string?
string cmd = "Static hostname: gatewayIcon name: computer - desktopChassis: desktopMachine ID: 706ecaf18cea4c919eb515d0e73c7fe4Boot ID: c2f95d12ab334e57ac7e6503f7d0cd87Operating System: CentOS Linux 8(Core)CPE OS Name: cpe:/ o:centos: centos: 8Kernel: Linux 4.18.0 - 147.3.1.el8_1.x86_64Architecture: x86 - 64Thu Dec 30 15:31:24 EST 2021total used free shared buff / cache availableMem: 7887756 455084 4067136 427084 3365536 6746868Swap: 8183804 0 8183804Filesystem Size Used Avail Use % Mounted ondevtmpfs 3.8G 0 3.8G 0 % / devtmpfs 3.8G 84K 3.8G 1 % / dev / shmtmpfs 3.8G 417M 3.4G 11 % / runtmpfs 3.8G 0 3.8G 0 % / sys / fs / cgroup/ dev / mapper / cl - root 50G 3.2G 47G 7 % // dev / sda2 976M 188M 721M 21 % / boot/ dev / sda1 599M 6.8M 593M 2 % / boot / efi/ dev / mapper / cl - home 53G 12G 42G 22 % / hometmpfs 771M 200K 771M 1 % / run / user / 1000total 120G 15G 105G 13 % -procs---------- - memory------------ - swap------ - io---- - system--------cpu---- -r b swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 4067108 4884 3360652 0 0 0 2 1 3 37 2 61 0 0";
diagtext = cmd;
split = Regex.Split(diagtext, @"%");
foreach (var item in split)
{
diskmem = split[10];
}
所以我有一个名为 cmd
的长字符串,我使用正则表达式在百分比 %
(符号)旁边显示一个特定的字符串。我能够显示此字符串:/ run / user / 1000total 120G 15G 105G 13 %
,但我只需要 13
而不是 13
.
之前的字符串
我该怎么做?
您可以使用此正则表达式字符串在任何 % 符号之前获取所有百分比计数:
([\d]{1,3})\s%
我不会大声评论,所以我会把我的评论放在这个答案中。
需要更多关于数据结构的信息才能正确回答这个问题,但乍一看,您似乎可以用空格分割这个字符串并获取第 10 项。另一方面,我想知道您为什么使用 foreach 循环。您没有使用 var 项目。
string[] items = diskmem.Split(' ');
对 split[]
数组的每个索引使用白色 space 分隔符进行另一个拆分,resplit[]
数组的最后一个索引将是 % 符号之前的字符串,直到第一个白色 space 出现:
static void SomeMethod()
{
string cmd = @"Static hostname: gatewayIcon name: computer - desktopChassis: desktopMachine ID:
706ecaf18cea4c919eb515d0e73c7fe4Boot ID: c2f95d12ab334e57ac7e6503f7d0cd87Operating System:
CentOS Linux 8(Core)CPE OS Name: cpe:/ o:centos: centos: 8Kernel: Linux 4.18.0 - 147.3.1.el8_1.x86_64Architecture: x86
- 64Thu Dec 30 15:31:24 EST 2021total used free shared buff / cache availableMem:
7887756 455084 4067136 427084 3365536 6746868Swap: 8183804 0 8183804Filesystem Size
Used Avail Use % Mounted ondevtmpfs
3.8G 0 3.8G 0 % / devtmpfs 3.8G 84K 3.8G 1 % / dev / shmtmpfs 3.8G 417M 3.4G 11 % / runtmpfs
3.8G 0 3.8G 0 % / sys / fs / cgroup/ dev / mapper / cl
- root 50G 3.2G 47G 7 % // dev / sda2 976M 188M 721M 21
% / boot/ dev / sda1 599M 6.8M 593M 2 % / boot / efi/ dev
/ mapper / cl - home 53G 12G 42G 22 % / hometmpfs 771M 200K
771M 1 % / run / user / 1000total 120G 15G 105G 13
% -procs---------- - memory------------ - swap------ - io---- - system--------cpu---- -r b
swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 4067108 4884 3360652 0 0 0 2 1 3 37 2 61 0 0";
diagtext = cmd;
split = Regex.Split(diagtext, @"%");
var resplit = split[10].Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// OUTPUT: '13'
string finalResult = resplit[resplit.Length - 1];
}
你遗漏了一些我们可以用来获得一致结果的模式,但假设你解析的字符串是你显示的示例字符串中的倒数第二个,你可以使用 Split
来获取最后一个值倒数第二个 split
字符串的:
//...
var split = Regex.Split(diagtext, @"%"); // your code
var target = split.ElementAt(split.Length - 2).Split(); //split the string
var val = target.ElementAt(target.Length - 2); //isolate the value 13
或
var target = split.ElementAt(split.Length - 2).Split()
.Where(p => p != string.Empty).ToArray();
//...
如果你想跳过空格。
string cmd = "Static hostname: gatewayIcon name: computer - desktopChassis: desktopMachine ID: 706ecaf18cea4c919eb515d0e73c7fe4Boot ID: c2f95d12ab334e57ac7e6503f7d0cd87Operating System: CentOS Linux 8(Core)CPE OS Name: cpe:/ o:centos: centos: 8Kernel: Linux 4.18.0 - 147.3.1.el8_1.x86_64Architecture: x86 - 64Thu Dec 30 15:31:24 EST 2021total used free shared buff / cache availableMem: 7887756 455084 4067136 427084 3365536 6746868Swap: 8183804 0 8183804Filesystem Size Used Avail Use % Mounted ondevtmpfs 3.8G 0 3.8G 0 % / devtmpfs 3.8G 84K 3.8G 1 % / dev / shmtmpfs 3.8G 417M 3.4G 11 % / runtmpfs 3.8G 0 3.8G 0 % / sys / fs / cgroup/ dev / mapper / cl - root 50G 3.2G 47G 7 % // dev / sda2 976M 188M 721M 21 % / boot/ dev / sda1 599M 6.8M 593M 2 % / boot / efi/ dev / mapper / cl - home 53G 12G 42G 22 % / hometmpfs 771M 200K 771M 1 % / run / user / 1000total 120G 15G 105G 13 % -procs---------- - memory------------ - swap------ - io---- - system--------cpu---- -r b swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 4067108 4884 3360652 0 0 0 2 1 3 37 2 61 0 0";
diagtext = cmd;
split = Regex.Split(diagtext, @"%");
foreach (var item in split)
{
diskmem = split[10];
}
所以我有一个名为 cmd
的长字符串,我使用正则表达式在百分比 %
(符号)旁边显示一个特定的字符串。我能够显示此字符串:/ run / user / 1000total 120G 15G 105G 13 %
,但我只需要 13
而不是 13
.
我该怎么做?
您可以使用此正则表达式字符串在任何 % 符号之前获取所有百分比计数:
([\d]{1,3})\s%
我不会大声评论,所以我会把我的评论放在这个答案中。 需要更多关于数据结构的信息才能正确回答这个问题,但乍一看,您似乎可以用空格分割这个字符串并获取第 10 项。另一方面,我想知道您为什么使用 foreach 循环。您没有使用 var 项目。
string[] items = diskmem.Split(' ');
对 split[]
数组的每个索引使用白色 space 分隔符进行另一个拆分,resplit[]
数组的最后一个索引将是 % 符号之前的字符串,直到第一个白色 space 出现:
static void SomeMethod()
{
string cmd = @"Static hostname: gatewayIcon name: computer - desktopChassis: desktopMachine ID:
706ecaf18cea4c919eb515d0e73c7fe4Boot ID: c2f95d12ab334e57ac7e6503f7d0cd87Operating System:
CentOS Linux 8(Core)CPE OS Name: cpe:/ o:centos: centos: 8Kernel: Linux 4.18.0 - 147.3.1.el8_1.x86_64Architecture: x86
- 64Thu Dec 30 15:31:24 EST 2021total used free shared buff / cache availableMem:
7887756 455084 4067136 427084 3365536 6746868Swap: 8183804 0 8183804Filesystem Size
Used Avail Use % Mounted ondevtmpfs
3.8G 0 3.8G 0 % / devtmpfs 3.8G 84K 3.8G 1 % / dev / shmtmpfs 3.8G 417M 3.4G 11 % / runtmpfs
3.8G 0 3.8G 0 % / sys / fs / cgroup/ dev / mapper / cl
- root 50G 3.2G 47G 7 % // dev / sda2 976M 188M 721M 21
% / boot/ dev / sda1 599M 6.8M 593M 2 % / boot / efi/ dev
/ mapper / cl - home 53G 12G 42G 22 % / hometmpfs 771M 200K
771M 1 % / run / user / 1000total 120G 15G 105G 13
% -procs---------- - memory------------ - swap------ - io---- - system--------cpu---- -r b
swpd free buff cache si so bi bo in cs us sy id wa st2 0 0 4067108 4884 3360652 0 0 0 2 1 3 37 2 61 0 0";
diagtext = cmd;
split = Regex.Split(diagtext, @"%");
var resplit = split[10].Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
// OUTPUT: '13'
string finalResult = resplit[resplit.Length - 1];
}
你遗漏了一些我们可以用来获得一致结果的模式,但假设你解析的字符串是你显示的示例字符串中的倒数第二个,你可以使用 Split
来获取最后一个值倒数第二个 split
字符串的:
//...
var split = Regex.Split(diagtext, @"%"); // your code
var target = split.ElementAt(split.Length - 2).Split(); //split the string
var val = target.ElementAt(target.Length - 2); //isolate the value 13
或
var target = split.ElementAt(split.Length - 2).Split()
.Where(p => p != string.Empty).ToArray();
//...
如果你想跳过空格。