从字符串行中解析出GUID

3

我有不同的选项来将我的GUIDS存储为字符串行。

1. Accessibility|5102d73a-1b0b-4461-93cd-0c024738c19e
2. 5102d73a-1b0b-4461-93cd-0c024738c19e;#5102d73a-1b0b-4461-93cd-0c024733d52d
3. |;#5102d73a-1b0b-4461-93cd-0c024738c19e;#SharePointTag|5102d73a-1b0b-4461-93cd-0c024733d52d
3. Business pages|;#5102d73a-1b0b-4461-93cd-0c024738cz13;#SharePointTag|5102d73a-1b0b-4461-93cd-0c024733d52d

你们能帮我想出如何解析这些标签并最终获得Guids列表吗?也许正则表达式在这种情况下会有所帮助?


3
你使用了你给我们的所有示例吗?还是你打算从这些示例中选一个作为存储你指南的方式?你能否提供更多关于你试图做什么的信息。 - Purplegoldfish
看了你的数据结构,我认为你需要先整理好数据结构,决定使用什么分隔符。我可以看到 | , ; # - Bek Raupov
4个回答

5

看起来你正在处理托管元数据、术语存储 ID 和术语集 ID :)

只需使用常规正则表达式(下面的“p”变量):

string c1 = "Accessibility|5102d73a-1b0b-4461-93cd-0c024738c19e";
string c2 = "5102d73a-1b0b-4461-93cd-0c024738c19e;#5102d73a-1b0b-4461-93cd-0c024733d52d";
string c3 = "|;#5102d73a-1b0b-4461-93cd-0c024738c19e;#SharePointTag|5102d73a-1b0b-4461-93cd-0c024733d52d";
string c4 = "Business pages|;#5102d73a-1b0b-4461-93cd-0c024738cz13;#SharePointTag|5102d73a-1b0b-4461-93cd-0c024733d52d";
string p = @"([a-zA-Z0-9]{8}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{12})";

MatchCollection mc;

Console.WriteLine("#1");
mc = Regex.Matches(c1, p);
foreach (var id in mc)
    Console.WriteLine(id);

Console.WriteLine("#2");
mc = Regex.Matches(c2, p);
foreach (var id in mc)
    Console.WriteLine(id);

Console.WriteLine("#3");
mc = Regex.Matches(c3, p);
foreach (var id in mc)
    Console.WriteLine(id);

Console.WriteLine("#4");
mc = Regex.Matches(c4, p);
foreach (var id in mc)
    Console.WriteLine(id);

输出什么:
#1
5102d73a-1b0b-4461-93cd-0c024738c19e
#2
5102d73a-1b0b-4461-93cd-0c024738c19e
5102d73a-1b0b-4461-93cd-0c024733d52d
#3
5102d73a-1b0b-4461-93cd-0c024738c19e
5102d73a-1b0b-4461-93cd-0c024733d52d
#4
5102d73a-1b0b-4461-93cd-0c024738cz13
5102d73a-1b0b-4461-93cd-0c024733d52d
Press any key to continue...

你在模式的最后一部分缺失了A-Z,正确的应该是([a-zA-Z0-9]{8}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{4}[-][a-zA-Z0-9]{12}) - benderto

4
var possibleGuids = myString.Split("|;#".ToCharArray(), 
                                   StringSplitOptions.RemoveEmptyEntries);
Guid g;
foreach(var poss in possibleGuids)
{
  if(Guid.TryParse(poss, out g))
  {
      // g contains a guid!
  }
}

2
string sContent = "your data"; // any of your four forms of input
string sPattern = @"([a-z0-9]*[-]){4}[a-z0-9]*";

MatchCollection mc = Regex.Matches(sContent, sPattern );

foreach (var sGUID in mc)
{
    // Do whatever with sGUID
}

5102d73a-1b0b-4461-93cd-0c024738cz13会通过您的模式,但是Guid.TryParse返回false。 - Damith
好的解决方案!谢谢。但是有一个错误,它只返回了GUID的一部分:5102d73a-1b0b-4461-93cd的一部分。 - Wild Goat

1

你可以例如分割字符串

 "fist|second".Split('|')

一旦获得GUID字符串,使用以下方法将其转换为GUID

 Guid = new Guid(myString);

对于第一行

var guid = new Guid("Accessibility|5102d73a-1b0b-4461-93cd-0c024738c19e".Split("|")[1]);

第二行

var myArray = "5102d73a-1b0b-4461-93cd-0c024738c19e;#5102d73a-1b0b-4461-93cd-0c024733d52d".Split(';');
var guid1 = new Guid(myArray[0]);
var guid2 = new Guid(myArray[1].Replace('#',''));

所以你可以这样继续下去...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接