C#的正则表达式Guid?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (88)

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

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

我的第二个问题是,我发现一个有效的正则表达式,我假设我会使用,Regex.Replace(String, String, MatchEvaluator)但我不太确定的语法。可能是这样的:

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

我试图解析的字符串可能如下所示:

“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)]”

提问于
用户回答回答于

这一个很简单:

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

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

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

更新1

上述正则表达式将匹配具有错误结束分隔符的误报。

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

条件由JGsoft引擎,Perl,PCRE,Python和.NET框架支持。Ruby从版本2.0开始支持它们。基于PCRE的具有正则表达式特征的Delphi,PHP和R等语言也支持条件。

随后的正则表达式将匹配

{123}
(123)
123

并不匹配

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

正则表达式:

^({)?(\()?\d+(?(1)})(?(2)\))$
用户回答回答于

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

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

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励