在字符串中查找匹配的guid

时间:2012-11-02 06:31:31

标签: c# regex

我需要使用Regex

在字符串中找到匹配的GUID
string findGuid="hi sdkfj 1481de3f-281e-9902-f98b-31e9e422431f sdfsf 1481de3f-281e-9902-f98b-31e9e422431f"
var guid = Regex.Match(m.HtmlBody.TextData, @"^(\{){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}$").Value;

5 个答案:

答案 0 :(得分:9)

如果您想使用Regex模式获取GUID。然后,尝试这种模式

(\{){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}(\}

示例

string findGuid = "hi sdkfj 1481de3f-281e-9902-f98b-31e9e422431f sdfsf 1481de3f-281e-9902-f98b-31e9e422431f"; //Initialize a new string value
MatchCollection guids = Regex.Matches(findGuid, @"(\{){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}"); //Match all substrings in findGuid
for (int i = 0; i < guids.Count; i++)
{
    string Match = guids[i].Value; //Set Match to the value from the match
    MessageBox.Show(Match); //Show the value in a messagebox (Not required)
}

Regex Matcher matching TWO GUIDs from a string

注意:我使用了您提供的相同模式,但只删除了^字符,表示表达式必须与字符串的开头匹配。然后,删除$字符,表示表达式必须匹配字符串的结尾。

有关正则表达式的更多信息,请访问:
Regular Expressions - a Simple User Guide and Tutorial

谢谢, 我希望你觉得这很有帮助:)

答案 1 :(得分:7)

看起来您使用了不正确的正则表达式。 如果你需要guid

  

{8} - {4} - {4} - {4} - {12}

应该像

  

[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}

您可以尝试这种方式:

string findGuid="hi sdkfj 1481de3f-281e-9902-f98b-31e9e422431f sdfsf 1481de3f-281e-9902-f98b-31e9e422431f";
    string regexp = @"[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}";
    if (Regex.IsMatch(findGuid, regexp))
    {
        Console.WriteLine(
        Regex.Match(findGuid, regexp).Value
        );

    }

答案 2 :(得分:1)

您可以在分割数组上使用Guid.TryParse。类似的东西:

string findGuid = "hi sdkfj 1481de3f-281e-9902-f98b-31e9e422431f sdfsf 1481de3f-281e-9902-f98b-31e9e422431f";
string[] splitArray = findGuid.Split();
List<Guid> listofGuid = new List<Guid>();
foreach (string str in splitArray)
{
    Guid temp;
    if (Guid.TryParse(str, out temp))
        listofGuid.Add(temp);
}

这将为你提供Guid列表中的两个项目

编辑:根据OP的评论,新字符串

string findGuid="hi sdkfj x-Guid:1481de3f-281e-9902-f98b-31e9e422431f sdfsf x-Guid:1481de3f-281e-9902-f98b-31e9e422431f"

可以指定多个拆分分隔符,例如:

string[] splitArray = findGuid.Split(' ', ':');

答案 3 :(得分:1)

Pattern =“\ b [\ dA-F] {8} - [\ dA-F] {4} - [\ dA-F] {4} - [\ dA-F] {4} - [\ DA-F] {12} - \ d +“
string input = "name=4a3779ab-56cc-41b5-ac7c-03bbf673439c-53607.jpg This is input string";
    Match m = Regex.Match(input, @"\b[\dA-F]{8}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{4}-[\dA-F]{12}", RegexOptions.IgnoreCase);
    string output = null;
    if (m.Success)
        output = m.Value;

答案 4 :(得分:0)

使用.NET 4.0及更高版本,您可以使用Guid.TryParse。这是我使用的扩展方法。

public static bool IsGuid(this string checkGuid)
{
    if (string.IsNullOrEmpty(checkGuid)) return false;
    Guid resultGuid;
    return Guid.TryParse(checkGuid, out resultGuid);
}

以下是你如何称之为。

public MyMethod(string myToken)
{
    if (myToken.IsGuid())
    {
        // Do something
    }
}