簡體   English   中英

C#Regex.Split和正則表達式

[英]C# Regex.Split and Regular expression

我有字符串,我需要將其拆分兩次,然后選擇要放在特殊字符后面的部分。

可以說:

string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436";

string[] guids = Regex.Split(myString,";#");

所以在這里,我得到了兩個帶有Value + GUID元素的數組。 但我只需要Guid,例如:

[0] 82e146e7-bc85-4bd4-a691-23d55c686f4b

[1] 55140947-00d0-4d75-9b5c-00d8d5ab8436

用一兩行來做嗎?

您可以做到這一點,但是僅僅因為您可以一行完成就可以了 ,但這並不意味着您應該這樣做 (如果您太喜歡這里,便會提高可讀性)。 顯然這里根本沒有驗證。

string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436";

string[] guids = Regex.Split(myString, ";#")
                      .SelectMany(s => Regex.Split(s, @"\|").Skip(1))
                      .ToArray();

Assert.AreEqual(2, guids.Length);
Assert.AreEqual("82e146e7-bc85-4bd4-a691-23d55c686f4b", guids[0]);
Assert.AreEqual("55140947-00d0-4d75-9b5c-00d8d5ab8436", guids[1]);

如果每個輸入的最后部分始終是guid,則可以輕松地執行此操作而無需使用正則表達式:

string[] guids = String.Split(";").Select(c => c.Substring(c.Length - 36)).ToArray();
string[] guids = myString.Split(';').Select(x => x.Split('|')[1]).ToArray();
string myString = "Word 2010|82e146e7-bc85-4bd4-a691-23d55c686f4b;#Videos|55140947-00d0-4d75-9b5c-00d8d5ab8436";

//split the string by ";#"
string[] results = myString.Split(new string[] { ";#" }, StringSplitOptions.RemoveEmptyEntries);

//remove the "value|" part
results[0] = results[0].Substring(results[0].IndexOf('|') + 1);
results[1] = results[1].Substring(results[1].IndexOf('|') + 1);

//Same as above, but in a for loop. usefull if there are more then 2 guids to find
//for(int i = 0; i < results.Length; i++)
//  results[i] = results[i].Substring(results[i].IndexOf('|') + 1);

foreach(string result in results)
    Console.WriteLine(result);
var guids = Regex
    .Matches(myString, @"HEX{8}-HEX{4}-HEX{4}-HEX{4}-HEX{12}".Replace("HEX", "[A-Fa-f0-9]"))
    .Cast<Match>()
    .Select(m => m.Value)
    .ToArray();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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