C#正则expression式Guid

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

有一个很好的正则expression式来识别Guid吗?

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

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

我试图parsing的string可能如下所示:

“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

@NonStatic在注释中指出上述正则expression式将匹配错误的结束分隔符的错误肯定。

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

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

下面的正则expression式匹配

 {123} (123) 123 

和不匹配

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

正则expression式:

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

解决scheme被简化为仅匹配数字,以更清楚的方式显示如果需要的话。

最基本的正则expression式如下:

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

或者你可以把它粘贴在这里 。

希望这可以为你节省一些时间。

您可以使用以下链接轻松自动生成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); 

在.NET Framework 4中,增强了System.Guid结构,其中包括新的TryParse和TryParseExact方法来parsingGUID。 这是一个例子。

  //Generate New GUID Guid objGuid = Guid.NewGuid(); //Take invalid guid format string strGUID = "aaa-aaaa"; 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)); } 

在这个例子中,我们创build了一个新的guid对象,并且还带有一个具有无效guid的stringvariables。 之后,我们使用TryParse方法来validation这两个variables是否有有效的GUID格式。 通过运行示例,您可以看到该stringvariables没有有效的guid格式,并提供“InValid guid”消息。 如果stringvariables具有有效的GUID,则将在TryParse方法中返回true。