在c#中匹配结果

时间:2017-07-07 17:55:15

标签: c# regex replace

我有以下字符串

@Builder

我只想获取图片网址。

我的代码是:

background-image: url('https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg')

Match.Success 不返回任何内容,因此无法获取图片网址。

有什么遗失的吗?这曾经工作但现在不行。

4 个答案:

答案 0 :(得分:1)

以下模式可以实现您的结果,而无需使用string.replace

var pattern = @"&#39;(?<url>.*)&#39;";
Match match = Regex.Match(image, pattern);
Console.WriteLine($"Math: {match.Groups["url"].Value}");

如果您想要字符串周围的",请添加以下内容:

var result = $"\"{match.Groups["url"].Value}\""

答案 1 :(得分:1)

不需要正则表达式,只需

  • 使用&#39; substring
  • 拆分字符串
  • 找到以http
  • 开头的元素
  • 返回找到的第一个项目。

C# demo

var s = "background-image: url(&#39;https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg&#39;)";
var res = s.Split(new[] {"&#39;"}, StringSplitOptions.None)
    .Where(v => v.StartsWith("http"))
    .FirstOrDefault();
Console.WriteLine(res);
// => https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg 

如果您需要使用正则表达式,请使用标准正则表达式匹配两个字符串之间的字符串,start(.*?)end其中(.*?) 捕获到任意0或更多字符除了换行符之外,*?量词是 lazy 的尽可能少:

var s = "background-image: url(&#39;https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg&#39;)";
var res = Regex.Match(s, @"&#39;(.*?)&#39;").Groups[1].Value ?? string.Empty;
Console.WriteLine(res);
// => https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg

请参阅another C# demo

答案 2 :(得分:0)

要获取url,您可以使用Split并在“url('”之后获取字符串,并在末尾用空字符串替换')或再次使用Split并获取“')之前的字符串”或使用Substring获取“url('”和“')之间的字符串”或者只是使用.Replace删除不是url的所有内容。

string url = img.Split(new[] { "url(&#39;" }, StringSplitOptions.None)[1].Replace("&#39;)", "");

string url = img.Split(new[] { "url(&#39;" }, StringSplitOptions.None)[1].Split(new[] { "&#39;)" }, StringSplitOptions.None)[0];

string url = img.Substring(img.IndexOf("url(&#39;") + "url(&#39;".Length, img.IndexOf("&#39;)") - img.IndexOf("url(&#39;") - "url(&#39;".Length);

string url = img.Replace("background-image: url(&#39;","").Replace("&#39;)","");

答案 3 :(得分:0)

正则表达式:(\".*\")

将匹配给定输入字符串的URL: background-image:url(“https://s3-eu-west-1.amazonaws.com/files.domain.com/uploads/image/file/168726/carousel_IMG_6455.jpg”)

image = image.Replace(@"&#39;", "\"");
Match match = Regex.Match(image, "(\\\".*\\\")");

修改 如果您正在寻找可以使用单引号或双引号对的内容:

(\".*\"|'.*')

Match match = Regex.Match(image, "(\\\".*\\\"|'.*')");