用于在括号内查找值的正则表达式

时间:2014-01-27 13:07:08

标签: c# .net regex

我有一行代码:

<link href="<%= Page.ResolveClientUrl("~/Styles/CAR.css") %>" rel="stylesheet" type="text/css" />

我只是想从中提取~/Styles/CAR.css。 请让我知道正则表达式。 link href标签也可以包含其他语法来引用css。 对于Ex,<link href="<%= Url.Content("~/Styles/CAR.css") %>" rel="stylesheet" type="text/css" />

4 个答案:

答案 0 :(得分:2)

我建议您使用HtmlAgilityPack(可从NuGet获得)进行HTML解析。获取href属性值将如下所示:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(stringWithHtml);
var link = doc.DocumentNode.SelectSingleNode("//link[@href]");
var href = link.Attributes["href"].Value;

然后,您可以从属性内容中提取~/Styles/CAR.css。正则表达式在这里很好,但你也可以避免它:

int startIndex = href.IndexOf('"');
int endIndex = href.LastIndexOf('"');
var result = href.Substring(startIndex + 1, endIndex - startIndex - 1);
// ~/Styles/CAR.css

使用正则表达式提取路径将类似于

var match = Regex.Match(href, @"ResolveClientUrl\(""(.*)""\)");
if (match.Success)
    result = match.Groups[1].Value;

答案 1 :(得分:1)

除了你should'nt parse HTML with regex之外,我会去

\(\"(.+)\"\)

作为你的正则表达式。只需在("")之间提取任何内容。

例如:

string strRegex = @"\(\""(.+)\""\)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"<link href=""<%= Page.ResolveClientUrl(""~/Styles/CAR.css"") %>"" rel=""stylesheet"" type=""text/css"" />";

foreach (Match myMatch in myRegex.Matches(strTargetString))
{
  if (myMatch.Success)
  {
    // Add your code here
  }
}

(示例代码取自http://regexhero.net/tester/

如果<link href=""<%= Page.ResolveClientUrl(""~/Styles/CAR.css"") %>"" rel=""stylesheet"" type=""text/css"" />只出现一次,或者你想只获得第一次出现,那么你可以摆脱for循环并使用:

string strRegex = @"\(\""(.+)\""\)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"<link href=""<%= Page.ResolveClientUrl(""~/Styles/CAR.css"") %>"" rel=""stylesheet"" type=""text/css"" />";

Match myMatch = myRegex.Match(strTargetString);

这里的区别在于使用Regex.Matches(string)(返回MatchCollection;每个匹配的出现次数)vs Regex.Match(string)(返回单个Match;仅使用第一次匹配的出现)

答案 2 :(得分:0)

使用它:

/\(([^\)]*)\)/

使用perl进行测试:

> cat temp
<link href="<%= Page.ResolveClientUrl("~/Styles/CAR.css") %>" rel="stylesheet" type="text/css" />
> perl -lne 'print $1 if(/\(([^\)]*)\)/)' temp
"~/Styles/CAR.css"
> 

答案 3 :(得分:0)

&lt; link href =“&lt;%= Page.ResolveClientUrl(”〜/ Styles / CAR.css“)%&gt;” rel =“stylesheet”type =“text / css”/&gt;

对于快速正则表达式,我们可以使用括号内的引号内的信息((“〜/ Styles / CAR.css”))并使用该信息将其分组为一个。

转义括号的快速正则表达式

&lt; link href =“&lt;%=。* \(”(。*)\)。*%&gt;“(。* /&gt;)

在上面的正则表达式中有两组。第一个匹配的组将向我们提供所需的信息,即〜/ Styles / CAR.css。

您可以在http://regexpal.com/中查看并尝试其他模式。