C# Regex for Guid

4sup72z8  于 2023-06-25  发布在  C#
关注(0)|答案(7)|浏览(143)

我需要解析一个字符串,并在每个Guid值周围添加单引号。我想我可以用一个正则表达式来做这件事,但我不是一个正则表达式大师。
是否有一个好的Regex来识别一个Guid?
我的第二个问题是,一旦我找到了一个有效的正则表达式,我假设我会使用Regex.Replace(String, String, MatchEvaluator),但我不太确定语法。可能是这样的:

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

我试图解析的字符串可能看起来像这样:
“选择passwordco0_.PASSWord_CONFIG_ID作为PASSWord1_46_0_,FROM PASSWORD_CONFIG passwordco 0_ WHERE passwordco0_.PASSWord_CONFIG_ID= baf 04077-a3 c 0 - 454 b-ac 6 f-9 fec 00 b8 e170;@p0 = baf 04077-a3 c 0 - 454 b-ac 6 f-9 fec 00 b8 e170 [类型:指南(0)]”

i34xakig

i34xakig1#

这一个是相当简单的,并不需要一个代表,因为你说。

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

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

ca761232ed4211cebacd00aa0057b223
CA761232-ED42-11CE-BACD-00AA0057B223
{CA761232-ED42-11CE-BACD-00AA0057B223}
(CA761232-ED42-11CE-BACD-00AA0057B223)

更新1

@NonStatic在评论中指出,上面的正则表达式将匹配具有错误结束分隔符的误报。
这可以通过广泛支持的正则表达式条件来避免。
JGsoft引擎、Perl、PCRE、Python和.NET框架都支持条件。Ruby从2.0版本开始支持它们。具有基于PCRE的正则表达式特性的语言(如 Delphi 、PHP和R)也支持条件。(来源http://www.regular-expressions.info/conditional.html
后面的正则表达式将匹配

{123}
(123)
123

而且不会匹配

{123)
(123}
{123
(123
123}
123)

Regex:

^({)?(\()?\d+(?(1)})(?(2)\))$

解决方案被简化为只匹配数字,以便在需要时以更清晰的方式显示所需的内容。

xienkqul

xienkqul2#

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

(^([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})$)

或者你可以paste it here
希望这能节省你一些时间。

m0rkklqb

m0rkklqb3#

对于C# .Net查找和替换给定文本中的任何guid字符串,
使用此RegEx:

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

示例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
);

的确有效!它匹配并替换了以下样式,这些样式对于GUID来说都是等效的和可接受的格式。

"aa761232bd4211cfaacd00aa0057b243" 
"AA761232-BD42-11CF-AACD-00AA0057B243" 
"{AA761232-BD42-11CF-AACD-00AA0057B243}" 
"(AA761232-BD42-11CF-AACD-00AA0057B243)"
eit6fx6z

eit6fx6z4#

在.NET Framework 4中有增强的System.Guid结构,其中包括新的TryParse和TryParseExact方法来解析GUID。这里有一个例子。

//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));
    }

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

sirbozc5

sirbozc55#

您可以使用以下命令轻松地自动生成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);
wpx232ag

wpx232ag6#

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

^[0-9A-Fa-f\-]{36}$
au9on6nz

au9on6nz7#

要简单地将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}

相关问题