我需要解析一个字符串并在每个 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/