如何在某些文本中找到所有Guid?

时间:2009-03-13 20:25:50

标签: .net vb.net regex guid

我的数据库中有一堆网页内容,其中包含以下链接:

<a href="/11ecfdc5-d28d-4121-b1c9-1f898ac0b72e">Link</a>

该Guid唯一标识符是同一数据库中另一个页面的ID。

我想抓取这些网页并检查链接是否损坏。

为此,我需要一个可以返回页面上所有Guid列表的函数:

Function FindGuids(ByVal Text As String) As Collections.Generic.List(Of Guid)
    ...
End Function

我认为这是正则表达式的工作。但是,我不知道语法。

4 个答案:

答案 0 :(得分:8)

  

[0-9A-F] {8} - [0-9A-F] {4} - [0-9A-F] {4} - [0-9A-F] {4} - [O-图9a-F] {12}

答案 1 :(得分:8)

Function FindGuids(ByVal Text As String) As List(Of Guid)
    Dim Guids As New List(Of Guid)
    Dim Pattern As String = "[a-fA-F0-9]{8}-([a-fA-F0-9]{4}-){3}[a-fA-F0-9]{12}"
    For Each m As Match In Regex.Matches(Text, Pattern)
        Guids.Add(New Guid(m.Value))
    Next
    Return Guids
End Function

答案 2 :(得分:3)

建议您获取expresso的免费副本并学习构建它们!

这是一次没有优化的10秒尝试,检查大小写并创建一个编号的捕获组:

([a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12})

然后你只需要遍历匹配的组......

答案 3 :(得分:2)

有更简单的方法来检查损坏的链接....例如,我认为http://www.totalvalidator.com/会这样做:D

这也可以帮助

static Regex isGuid = 
    new Regex(@"^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$", RegexOptions.Compiled);

然后

static bool IsGuid(string candidate, out Guid output)
{
bool isValid = false;
output=Guid.Empty;
if(candidate!=null)
{

 if (isGuid.IsMatch(candidate))
 {
  output=new Guid(candidate);
  isValid = true;
 }
}
return isValid;

}