[英]Regex finding string with parenthesis in another string with parenthesis
[英]Regex for finding value inside parenthesis
我有一行代碼:
<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" />
我建議您使用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;
除此之外,您不應該使用regex解析HTML ,我會繼續
\(\"(.+)\"\)
作為您的正則表達式。 只需提取("
和")
之間的任何內容。
例如:
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
;每個匹配的事件)與Regex.Match(string)
(返回一個Match
;僅第一個匹配的事件)。
用這個:
/\(([^\)]*)\)/
經過perl測試:
> cat temp
<link href="<%= Page.ResolveClientUrl("~/Styles/CAR.css") %>" rel="stylesheet" type="text/css" />
> perl -lne 'print $1 if(/\(([^\)]*)\)/)' temp
"~/Styles/CAR.css"
>
<link href =“ <%= Page.ResolveClientUrl(”〜/ Styles / CAR.css“)%>” rel =“ stylesheet” type =“ text / css” />
對於快速正則表達式,我們可以使用括號內的引號((“〜/ Styles / CAR.css”))中的信息,並使用該信息將其分組為一個。
轉義括號是一種快速的正則表達式
<link href =“ <%=。* \\(”(。*)\\)。*%>“(。* />)
在上述正則表達式中有兩組。 第一個匹配的組將為我們提供所需的信息,即〜/ Styles / CAR.css。
您可以在http://regexpal.com/中進行檢查,並嘗試其他模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.