有没有办法解析像这样的正则表达式
"/string1/string2/f63112f7-caae-38f4-9655-e23d6b530315"
我希望得到一个字符串:' f63112f7-caae-38f4-9655-e23d6b530315'
我尝试使用以下代码:
Match match2 = Regex.Match(input2, @"'/([^']*)");
或者这个:
Match match1 = Regex.Match(input1,
@"/((?:(?:\s*\{*\s*(?:0x[\dA-F]+)\}*\,?)+)|(?<![a-f\d])[a-f\d]{32}(?![a-f\d])|" +
@"(?:\{\(|)(?<![A-F\d])[A-F\d]{8}(?:\-[A-F\d]{4}){3}\-[A-F\d]{12}(?![A-F\d])(?:\}|\)|))");
但遗憾的是我失败了。
有没有办法用返回的guid解析这样的字符串? 谢谢你。
答案 0 :(得分:4)
您可以在没有正则表达式的情况下执行此操作,在/
上拆分,然后使用Guid.TryParse
最后一个元素,或所有元素,如:
string str = "/string1/string2/f63112f7-caae-38f4-9655-e23d6b530315";
Guid tempGuid;
foreach (var item in str.Split('/'))
{
if (Guid.TryParse(item, out tempGuid))
{
Console.WriteLine(item);
break;
}
}
如果您总是希望字符串末尾有Guid
,那么不要遍历所有元素,只需访问split数组中的最后一个元素并在Guid.TryParse
中使用
if(Guid.TryParse(str.Split('/').LastOrDefault(), out tempGuid))
{
//found Guid at the end of string
}
答案 1 :(得分:2)
您可以尝试使用以下正则表达式匹配最后一个/
符号旁边的所有字符,
(?<=\/)[^\/]*$
C#代码将是,
string str = @"/string1/string2/f63112f7-caae-38f4-9655-e23d6b530315";
string result = Regex.Match(str, @"(?<=\/)[^\/]*$").Value;
Console.WriteLine(result);
Console.ReadLine();
答案 2 :(得分:2)
如果您真的想使用正则表达式,这似乎适用于您的场景:
var match = Regex.Match(input, @"[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}");
Guid guid;
if (!match.Success || !Guid.TryParse(match.Value, out guid))
{
guid = Guid.Empty;
}
正如其他答案所暗示的那样,如果您的字符串始终采用预期格式,则可以采用更简单的方法。
答案 3 :(得分:1)
您不需要正则表达式,简单的LastIndexOf
+ Guid.TryParse
无效:
string guidString = str.Substring(str.LastIndexOf('/') + 1);
Guid guid = Guid.TryParse(guidString, out guid) ? guid : Guid.Empty;
答案 4 :(得分:0)
使用Split
和Last
Guid有一个输入字符串的ctor。
string str = "/string1/string2/f63112f7-caae-38f4-9655-e23d6b530315";
Guid g = new Guid(str.Split('/').Last());
答案 5 :(得分:0)