[英]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
之前的字符串。
我怎樣才能做到這一點?
對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];
}
您缺少一些我們可以用來獲得一致結果的模式,但假設您解析的字符串是您顯示的示例字符串的倒數第二個,您可以使用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();
//...
如果你想跳過空格。
我沒有大聲發表評論,所以我會在這個答案中發表我的評論。 要正確回答這個問題,需要更多關於數據結構的信息,但乍一看,您似乎可以用空格分割這個字符串並獲取第 10 項。 另一方面,我想知道您為什么使用 foreach 循環。 您沒有使用 var 項。
string[] items = diskmem.Split(' ');
您可以使用此正則表達式字符串在任何 % 符號之前獲取所有百分比計數:
([\d]{1,3})\s%
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.