C#Regex for Guid

Col*_*e W 112 c# regex

我需要解析一个字符串并在每个Guid值周围添加单引号.我以为我可以使用正则表达式来做这件事,但我不是一个正则表达式的大师.

是否有一个很好的正则表达式来识别Guid?

我的第二个问题是,一旦我找到了一个有效的正则表达式,我假设我会使用Regex.Replace(String, String, MatchEvaluator)但我不太确定语法.也许是这样的:

return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
    return string.Format("'{0}'", match.Groups[0].ToString());
});
Run Code Online (Sandbox Code Playgroud)

我正在尝试解析的字符串可能如下所示:

"SELECT passwordco0_.PASSWORD_CONFIG_ID as PASSWORD1_46_0_,FROM PASSWORD_CONFIG passwordco0_ WHERE passwordco0_.PASSWORD_CONFIG_ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170 [Type:Guid(0)]"

buc*_*ley 176

这个非常简单,并且不像你说的那样需要代表.

resultString = Regex.Replace(subjectString, 
     @"(?im)^[{(]?[0-9A-F]{8}[-]?(?:[0-9A-F]{4}[-]?){3}[0-9A-F]{12}[)}]?$", 
     "'$0'");
Run Code Online (Sandbox Code Playgroud)

这与以下样式匹配,这些样式都是GUID的等效和可接受的格式.

ca761232ed4211cebacd00aa0057b223
CA761232-ED42-11CE-BACD-00AA0057B223
{CA761232-ED42-11CE-BACD-00AA0057B223}
(CA761232-ED42-11CE-BACD-00AA0057B223)
Run Code Online (Sandbox Code Playgroud)

更新1

@NonStatic在评论中指出上述正则表达式将匹配具有错误结束分隔符的误报.

这可以通过广泛支持的正则表达式条件来避免.

JGsoft引擎,Perl,PCRE,Python和.NET框架支持条件.Ruby从2.0版开始支持它们.具有基于PCRE的正则表达式功能的Delphi,PHP和R等语言也支持条件.(来源http://www.regular-expressions.info/conditional.html)

随后的正则表达式将匹配

{123}
(123)
123
Run Code Online (Sandbox Code Playgroud)

而且不会匹配

{123)
(123}
{123
(123
123}
123)
Run Code Online (Sandbox Code Playgroud)

正则表达式:

^({)?(\()?\d+(?(1)})(?(2)\))$
Run Code Online (Sandbox Code Playgroud)

简化了解决方案,仅匹配数字,以更清晰的方式显示所需的数据.

  • 这不会考虑小写字符,这将是一个有效的案例.使用^ [{| \(]?[0-9a-fA-F] {8} [ - ]?([0-9a-fA-F] {4} [ - ]?){3} [0-9a -fA-F] {12} [\] |}]?$或使用/ i标志 (4认同)
  • 正则表达式也将允许少于 4 个减号。供那些关心这个的人参考。对于那些不在乎的人,这里有一个更简单的正则表达式,它允许更多的误报:`[0-9a-fA-F\-]{32,36}`。 (3认同)

Mat*_*ius 34

最基本的正则表达式如下:

(^([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})$) 
Run Code Online (Sandbox Code Playgroud)

或者你可以把它贴在这里.

希望这能为您节省一些时间.

  • 删除了重复:`[0-9A-Fa-f]{8}-([0-9A-Fa-f]{4}-){3}[0-9A-Fa-f]{12}`破折号可以是可选的:`[0-9A-Fa-f]{8}-?([0-9A-Fa-f]{4}-?){3}[0-9A-Fa-f]{ 12}`。 (9认同)

Con*_*ngo 8

您可以使用以下命令轻松自动生成C#代码:http://regexhero.net/tester/.

免费.

我是这样做的:

在此输入图像描述

然后该网站自动生成.NET代码:

string strRegex = @"\b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}\b";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"     {CD73FAD2-E226-4715-B6FA-14EDF0764162}.Debug|x64.ActiveCfg =         Debug|x64";
string strReplace = @"""$0""";

return myRegex.Replace(strTargetString, strReplace);
Run Code Online (Sandbox Code Playgroud)

  • 我还会在“af”中包含小写字符,以确保也支持小写 GUID。 (2认同)

GDr*_*oid 8

对于C#.Net来查找和替换给定文本中的任何guid外观字符串,

使用此RegEx:

[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?
Run Code Online (Sandbox Code Playgroud)

示例C#代码:

var result = Regex.Replace(
      source, 
      @"[({]?[a-fA-F0-9]{8}[-]?([a-fA-F0-9]{4}[-]?){3}[a-fA-F0-9]{12}[})]?", 
      @"${ __UUID}", 
      RegexOptions.IgnoreCase
);
Run Code Online (Sandbox Code Playgroud)

肯定有效!它匹配并替换以下样式,这些样式都是GUID的等效和可接受的格式.

"aa761232bd4211cfaacd00aa0057b243" 
"AA761232-BD42-11CF-AACD-00AA0057B243" 
"{AA761232-BD42-11CF-AACD-00AA0057B243}" 
"(AA761232-BD42-11CF-AACD-00AA0057B243)" 
Run Code Online (Sandbox Code Playgroud)

  • 接受的答案对我不起作用,但是这个答案确实有效! (2认同)

小智 8

我使用更简单的正则表达式模式

^[0-9A-Fa-f\-]{36}$
Run Code Online (Sandbox Code Playgroud)

  • 这将匹配多个 GUID (4认同)

Jay*_*hia 6

在.NET Framework 4中,System.Guid结构得到了增强,其中包括用于解析GUID的新TryParse和TryParseExact方法。这是示例。

    //Generate New GUID
    Guid objGuid = Guid.NewGuid();
    //Take invalid guid format
    string strGUID = "aaa-a-a-a-a";

    Guid newGuid;

    if (Guid.TryParse(objGuid.ToString(), out newGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", objGuid.ToString()));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", objGuid.ToString()));
    }


    Guid newTmpGuid;

    if (Guid.TryParse(strGUID, out newTmpGuid) == true)
    {
        Response.Write(string.Format("<br/>{0} is Valid GUID.", strGUID));
    }
    else
    {
        Response.Write(string.Format("<br/>{0} is InValid GUID.", strGUID));
    }
Run Code Online (Sandbox Code Playgroud)

在此示例中,我们创建了新的guid对象,并且还采用了一个具有无效guid的字符串变量。之后,我们使用TryParse方法来验证两个变量是否具有有效的Guid格式。通过运行示例,您可以看到字符串变量的有效guid格式无效,并且给出了“ InValid guid”消息。如果字符串变量具有有效的GUID,则它将在TryParse方法中返回true。

  • @Micah Armantrout:这可能是一个“很好”的答案,但不是*这个问题*的答案。如果您只是在自己喜欢的任何地方放一个答案,那就会违反StackOverflow的目的:) (13认同)
  • 好吧,对于像我这样的人来说,搜索“ guid的正则表达式”,这个答案确实是最有用的-我不需要__really__需要正则表达式,我不需要匹配GUID,并且此页面是“正则表达式检测到”的第一个结果guid”。 (8认同)
  • 问题是询问如何从更长的字符串中查找/提取GUID,而不验证GUID。建议您删除此答案。 (7认同)
  • 借用@Dan Field。我是在这里搜索guid的正则表达式的,而这个答案正是我真正想要的。这样就实现了StackOverflow的目的。 (3认同)

Jus*_*iel 6

要简单地将 GUID 与连字符匹配,如下所示:
63F0DA57-5AA2-4271-B9DE-6FD68008EA98
aa76ae52-14f2-5774-A645-9d002a72dec1

我使用以下内容:

[a-fA-F\d]{8}-[a-fA-F\d]{4}-[a-fA-F\d]{4}-[a-fA-F\d]{4}-[a-fA-F\d]{12}
Run Code Online (Sandbox Code Playgroud)