我有一行代码:
<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" />
答案 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/中查看并尝试其他模式。