Guid 的 C# 正则表达式

标签 c# regex

我需要解析一个字符串并在每个 Guid 值周围添加单引号。我在想我可以使用 Regex 来做到这一点,但我并不完全是 Regex 专家。

是否有用于识别 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)]"

最佳答案

这个非常简单,不需要您所说的委托(delegate)。

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)\))$

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

关于Guid 的 C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11040707/

相关文章:

php - 从 PHP 中的字符串中提取数字(不是数字)

python - 打印包含特定整数的行的行号

php - 使用正则表达式 PHP 按空格和连字符拆分句子

c# - 在 C# 中访问列表中的项目

c# - listbox isSelected DataTemplate 中的数据绑定(bind)

regex - 使用 bash 在 Ubuntu 或 Debian 上获取 IP 地址信息(网关和子网)

java - 使用 [3 :0] substring in it 解析字符串

c# - SPWeb.Groups 与 SPWeb.AssociatedGroups

c# - 将方法名称作为字符串传递并分配给委托(delegate)

c# - 在 MVC 中使用数据库连接包装方法