[英]C# Regex for Guid
我需要解析一个字符串并在每个 Guid 值周围添加单引号。 我在想我可以使用正则表达式来做到这一点,但我不完全是正则表达式大师。
是否有一个好的正则表达式可用于识别 Guid?
我的第二个问题是一旦我找到了一个有效的正则表达式,我假设我会使用Regex.Replace(String, String, MatchEvaluator)
但我不太确定语法。 也许是这样的:
return Regex.Replace(stringToFindMatch, GuidRegex, match =>
{
return string.Format("'{0}'", match.Groups[0].ToString());
});
我试图解析的字符串可能如下所示:
“选择密码co0_.PASSWORD_CONFIG_ID 为 PASSWORD1_46_0_,从 PASSWORD_CONFIG 密码co0_ WHERE passwordco0_.PASSWORD_CONFIG_ID=baf04077-a3c0-454b-ac6f-9fec00b8e170;@p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170;@p0 = baf04077-a3c0-454b-ac6f-9fec00b8e10)]"
这个非常简单,并且不像你说的那样需要代表。
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版开始支持它们。 Delphi,PHP和R等具有基于PCRE的正则表达式功能的语言也支持条件。 (来源http://www.regular-expressions.info/conditional.html )
随后的正则表达式将匹配
{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})$)
或者你可以把它贴在这里 。
希望这能为您节省一些时间。
您可以使用以下命令轻松自动生成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);
对于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)"
在.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));
}
在这个例子中,我们创建了新的guid对象,并且还获取了一个具有无效guid的字符串变量。 之后我们使用TryParse方法验证两个变量是否都有有效的guid格式。 通过运行示例,您可以看到字符串变量没有有效的guid格式,并且它给出了“InValid guid”的消息。 如果字符串变量具有有效的guid,那么它将在TryParse方法中返回true。
我使用更简单的正则表达式模式
^[0-9A-Fa-f\-]{36}$
简单地将大写 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}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.