2017-07-07 59 views
1

结果我有以下字符串匹配在C#

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

,我只是想获得图像URL。

我的代码是:

image = image.Replace(@"'", "\""); 
Match match = Regex.Match(image, @"'([^']*)"); 

Match.Success回报什么,所以我不能获得图像URL。

有什么遗漏吗?这曾经工作,但不是现在。

+5

您正在用双引号“'替换”'“,而您的正则表达式正在查找单引号'''。 –

+0

我测试了正则表达式英雄和dotnet小提琴(https://dotnetfiddle.net/hH1eBE),我想这里的答案:https://stackoverflow.com/a/171499/5758637将为你工作。 –

+0

@DourHighArch是的!这是问题所在。在某些情况下,如果有任何答案可以解决您的问题,请附上“和其他人” – Apalabrados

回答

0

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

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

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

编辑: 如果你正在寻找的东西,将匹配单引号或双引号的对,你可以使用:

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

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

为了让你可以使用分割后“URL('”获取字符串和替换')在与空字符串结束或者再次使用分割,并得到前字符串“')”或者使用网址Substring获取“url('”和“')”之间的字符串,或者只是删除不是使用.Replace的url的所有内容。

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

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

string url = img.Substring(img.IndexOf("url('") + "url('".Length, img.IndexOf("')") - img.IndexOf("url('") - "url('".Length); 

string url = img.Replace("background-image: url('","").Replace("')",""); 
1

以下方式实现你的结果,没有使用string.replace。与'

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

无需正则表达式,只是

  • 分割字符串
  • 查找:

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

    如果你想在"周围的字符串,添加此元素起始于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其中(.*?)捕捉到第1个的任何0或更多字符等之间的匹配字符串除换行符,尽可能少的*?量词是

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