簡體   English   中英

正則表達式用於在括號內查找值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM