[英]Extracting values from a string in C#
我有以下字符串,我想從中檢索一些值:
============================
Control 127232:
map #;-
============================
Control 127235:
map $;NULL
============================
Control 127236:
我只想控制。 因此,有沒有一種方法可以從上面的字符串中檢索出一個包含[127232, 127235, 127236]
這樣的數組?
實現此目標的一種方法是使用正則表達式,它確實引入了一些復雜性,但會通過一些LINQ給出您想要的答案,以達到很好的效果。
從正則表達式開始,以便在組內捕獲所需的數據:
var regex = new Regex(@"Control\s+(\d+):");
這將查找文字字符串“ Control”,后跟一個或多個空格字符,后跟一個或多個數字(在捕獲組中),后跟文字字符串“:”。
然后使用上面定義的正則表達式從輸入中捕獲匹配項:
var matches = regex.Matches(inputString);
然后,使用一些LINQ,您可以將其轉換為數組
var arr = matches.OfType<Match>()
.Select(m => long.Parse(m.Groups[1].Value))
.ToArray();
現在arr
是一個long
數組,其中僅包含數字。
此處的實時示例: http : //rextester.com/rundotnet?code=ZCMH97137
試試看(假設您的字符串名為s,並且每行都用\\ n表示):
List<string> ret = new List<string>();
foreach (string t in s.Split('\n').Where(p => p.StartsWith("Control")))
ret.Add(t.Replace("Control ", "").Replace(":", ""));
ret.Add(...)
部分並不優雅,但是可以工作...
編輯:
如果要使用數組,請使用string[] arr = ret.ToArray();
SYNOPSYS:
我發現您確實是一個新手,所以我嘗試解釋一下:
s.Split('\\n')
創建一個字符串[](字符串中的每一行) .Where(...)
部分僅從數組中提取以Control開頭的字符串 foreach
部分通過返回的數組導航,一次獲取一個字符串 t.Replace(..)
切掉不需要的字符串 ret.Add(...)
最終將搜索到的項目添加到返回列表中 假設您要搜索的文本位於變量'text'中,請試着這樣做(它又快又臟):
List<string> numbers = System.Text.RegularExpressions.Regex.Split(text, "[^\\d+]").ToList();
numbers.RemoveAll(item => item == "");
第一行將所有數字拆分為一個列表中的單獨項目,它還拆分了許多空字符串,第二行刪除了空字符串,為您提供了三個數字的列表。 如果要將其轉換回數組,只需將以下行添加到末尾:
var numberArray = numbers.ToArray();
是的,方法存在。 我記不起它的簡單方法,但是要解析字符串以提取此值。 接下來是它的算法:
該算法的實現幾乎是原始的。.)
這是最簡單的實現(您的字符串為str):
int i, number, index = 0;
while ((index = str.IndexOf(':', index)) != -1)
{
i = index - 1;
while (i >= 0 && char.IsDigit(str[i])) i--;
if (++i < index)
{
number = int.Parse(str.Substring(i, index - i));
Console.WriteLine("Number: " + number);
}
index ++;
}
使用LINQ進行這樣的小操作令人懷疑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.