【发布时间】:2019-01-15 21:07:02
【问题描述】:
GUID 可以出现在带有或不带有单引号的语句中,例如
string inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID={90f0fb85-0f80-4466-9b8c-2025949e2079}";
我的要求是:
如果 GUID 用单引号括起来,请跳过它。
如果没有用单引号括起来,就用单引号括起来。
我希望输出像
inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID='{90f0fb85-0f80-4466-9b8c-2025949e2079}'"
或
inputString = @"ObjectID='{A591C480-2979-48ED-9796-5C3149472E7A}' and ObjectID={'90f0fb85-0f80-4466-9b8c-2025949e2079'}"
在单引号内查找 GUID 的正则表达式是
var quotedGuidMatches = Regex.Matches(inputString, @"'[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?'");
查找 GUID 的正则表达式是
var guidMatches = Regex.Matches(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b");
用单引号包围 guid 的正则表达式是
inputString = Regex.Replace(inputString, @"\b[({]?\s?[a-zA-Z0-9]{8}\s?[-]?\s?([a-zA-Z0-9]{4}\s?[-]?\s?){3}\s?[a-zA-Z0-9]{12}\s?[})]?\b", "'$0'", RegexOptions.IgnoreCase);
不幸的是,这个发现所有 GUID 都在单引号内并且没有单引号。 replace 方法最终会围绕 guid 已经有单引号和多个单引号。
您能否帮我找到不在单引号内的 GUID。然后用单引号括起来。
【问题讨论】:
-
目前还不是很清楚为什么要为此使用正则表达式。检查输入字符串的第一个和最后一个字符有什么问题?