gpt4 book ai didi

c# - 使用正则表达式提取组并在一行中构建 URL

转载 作者:太空宇宙 更新时间:2023-11-03 12:00:53 26 4
gpt4 key购买 nike

我目前正在尝试从字符串中提取值并构建包含这些值的 URL。我经历了十几个正则表达式问题,但我对答案不太满意。

我有包含多个信息的自定义编码字符串,我想构建一个包含这些信息的新 URL。

例如 35afe06d-8393-4559-b6d7-74d35ce131d8|Master 应该变成 http://my-server/media/guid/35afe06d-8393-4559-b6d7-74d35ce131d8? v=大师。我的第一个假设是

var input = "35afe06d-8393-4559-b6d7-74d35ce131d8|Master"
var pattern = @"((?:[a-f0-9]+-?){5})|(\w+)"
var replacement = "http://my-server/media/guid/$1?v=$2"
var output = Regex.Replace(input, pattern, replacement)

然而,这会用完整的 URL 替换每个组。限制是,我不知道inputpatternreplacementoutputpatternreplacement 是两个配置值,我不想让它成为 x 对配置值,input 来自应用程序并且可以有任何自定义编码(管道,冒号,...) output 取决于用例。它可以在模式中包含任意数量的组,最后甚至不必是 URL。

我可以想出不同的方法来做到这一点,比如自己解析字符串,或者尝试创建替换字典,或者使用正则表达式查找组,然后将字符串替换为 $1 => 匹配.组[0]。我只是觉得在 .NET 中必须有一个明显的单行解决方案,因为我什至记得在 PHP 中这样做过。

回答:这不是 .NET 限制,它只是未转义的管道。

最佳答案

在您的模式 (([a-f0-9]+-?){5})|\w+ 中,第二组应该在管道之后捕获单词字符(将管道转义为按字面匹配)。

如果您重复此部分 ([a-f0-9]+-?) 5 次,匹配也可以以连字符结束。

要匹配由破折号分隔的值,您可以匹配字符类 [a-f0-9]+ 并重复匹配 {4} 前缀的时间一个-

([a-f0-9]+(?:-[a-f0-9]+){4})\|(\w+)

.NET Regex demo | C# demo

enter image description here

var input = "35afe06d-8393-4559-b6d7-74d35ce131d8|Master";
var pattern = @"([a-f0-9]+(?:-[a-f0-9]+){4})\|(\w+)";
var replacement = "http://my-server/media/guid/$1?v=$2";
var output = Regex.Replace(input, pattern, replacement);
Console.WriteLine(output);

结果

http://my-server/media/guid/35afe06d-8393-4559-b6d7-74d35ce131d8?v=Master

关于c# - 使用正则表达式提取组并在一行中构建 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57079675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com