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。
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
對陣列的每個索引使用空格分隔符進行另一個拆分,split[]陣列的最后一個索引resplit[]將是 % 符號之前的字串,直到第一個空格出現:
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];
}
uj5u.com熱心網友回復:
您缺少一些我們可以用來獲得一致結果的模式,但是假設您決議的字串是根據您顯示的示例字串的倒數第二個,您可以使用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();
//...
如果你想跳過空格。
uj5u.com熱心網友回復:
我沒有大聲發表評論,所以我會在這個答案中發表我的評論。要正確回答這個問題,需要更多關于資料結構的資訊,但乍一看,您似乎可以用空格分割這個字串并獲取第 10 項。另一方面,我想知道您為什么使用 foreach 回圈。您沒有使用 var 項。
string[] items = diskmem.Split(' ');
uj5u.com熱心網友回復:
您可以使用此正則運算式字串在任何 % 符號之前獲取所有百分比計數:
([\d]{1,3})\s%
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410141.html
標籤:
