簡體   English   中英

從C#中的字符串中提取值

[英]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();

是的,方法存在。 我記不起它的簡單方法,但是要解析字符串以提取此值。 接下來是它的算法:

  1. 在字符串中找到單詞“ Control”及其結尾
  2. 在單詞后面找到一組數字
  3. 通過int.parse或TryParse提取數字
  4. 如果不是字符串的結尾-轉到步驟1

該算法的實現幾乎是原始的。.)

這是最簡單的實現(您的字符串為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM