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

我试图解析的字符串可能类似于下面这样:

”选择 PASSWORD _ CONFIG _ ID 为 PASSWORD1 _ 46 _ 0 _, 来自 密码 _ CONFIG 密码 co0 _ 哪里 密码 co0 _. PASSWORD _ CONFIG _ ID = baf04077-a3c0-454b-ac6f-9fec00b8e170; @ p0 = baf04077-a3c0-454b-ac6f-9fec00b8e170[类型: Guid (0)]”

168089 次浏览

这是一个非常简单的,不需要一个委托,因为你说。

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 的正则表达式特性,也支持条件

后面的正则表达式将匹配

{123}
(123)
123

而且不会匹配

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

正方糖:

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

解决方案被简化为只匹配数字,以便在需要时更清楚地显示需要什么。

在.NETFramework4中增强了 System.Guide 结构,包括新的 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”。如果 string 变量具有有效的 guid,那么在 TryParse 方法中这将返回 true。

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

免费的。

我是这样做的:

enter image description here

然后网站会自动生成.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);

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

(^([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 # . Net 来查找和替换给定文本中的任何 guid 查找字符串,

使用正则表达式:

[({]?[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)"

我使用更简单的 regex 模式

^[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}