簡體   English   中英

我將如何使用Regex從中獲取某個字符串?

[英]How would I use Regex to get a certain string out of this?

我正在使用webrequest從頁面下載源,然后需要使用Regex來抓取字符串並將其存儲在字符串中:

U_nQgAjU_tdUnfcA7lT5opoTLyLdslWDTpiNzcdkLoHlobS_HbujMw..

還需要:

bpvsid=nvnN2JFJqJc.&dcz=1

兩者都出於:

<td style="cursor:pointer;" class="" onclick="NewWindow('U_nQgAjU_tdUnfcA7lT5opoTLyLdslWDTpiNzcdkLoHlobS_HbujMw..', 'bpvsid=nvnN2JFJqJc.&dcz=1', 'bpvstage_edit', '1200', '800')" onmouseout="HideHover();"><img src="gfx/info.gif" alt="" tipwidth="450" ajaxtip="openajax.php?target=modules/bpv/bpvstage_hover_info.php&rid=&oid=&bpvsid=&bpvname=" /></td>

它不斷給我帶來錯誤,例如不夠)?

提前致謝。

當前代碼,可能在各個方面都是錯誤的。 真的很新:

 Regex rx = new Regex("(?<=class=\"\" onclick=\"NewWindow(').*(?=')");
            longId = (rx.Match(textBox2.Text).Value);
            textBox1.Text = longId;

正則表達式NewWindow\\('([^']*)', '([^']*)將與您所需要的相匹配。所需的兩個字符串將在Groups [1]和Groups [2]中。

var match = Regex.Match(textBox2.Text, "NewWindow\('([^']*)', '([^']*)");
var id1 = match.Groups[1].Value;
var id2 = match.Groups[2].Value;
var match = Regex.Match(s, @"onclick=""NewWindow\('([^']*)',\s*'([^']*)',.*");
if (match.Success)
{
    string longId = match.Groups[1].Value;
    string other = match.Groups[2].Value;
}

這將為您提供兩個具有值的組:

U_nQgAjU_tdUnfcA7lT5opoTLyLdslWDTpiNzcdkLoHlobS_HbujMw..
bpvsid=nvnN2JFJqJc.&dcz=1

請注意,您也可以只使用字符串函數代替正則表達式:

var s = "<td style=\"cursor:pointer;\" class=\"\" onclick=\"NewWindow('U_nQgAjU_tdUnfcA7lT5opoTLyLdslWDTpiNzcdkLoHlobS_HbujMw..', 'bpvsid=nvnN2JFJqJc.&dcz=1', 'bpvstage_edit', '1200', '800')\" onmouseout=\"HideHover();\"><img src=\"gfx/info.gif\" alt=\"\" tipwidth=\"450\" ajaxtip=\"openajax.php?target=modules/bpv/bpvstage_hover_info.php&rid=&oid=&bpvsid=&bpvname=\" /></td>";
var tmp = s.Substring(s.IndexOf("NewWindow('")).Split('\'');
var value1 = tmp[1]; // U_nQgAjU_tdUnfcA7lT5opoTLyLdslWDTpiNzcdkLoHlobS_HbujMw..
var value2 = tmp[3]; // bpvsid=nvnN2JFJqJc.&dcz=1

我將使用HtmlAgilityPack解析HTML,然后此非正則表達式方法起作用:

string html = // get your html ...
var doc = new HtmlAgilityPack.HtmlDocument();  
doc.LoadHtml(html);  // doc.Load can also consume a response-stream directly
var result = Enumerable.Empty<string>();
var firstTD = doc.DocumentNode.SelectNodes("//td").FirstOrDefault();
if (firstTD != null)
{
    if (firstTD.Attributes.Contains("onclick"))
    {
        string onclick = firstTD.Attributes["onclick"].Value;
        int newWindowIndex = onclick.IndexOf("newWindow(", StringComparison.OrdinalIgnoreCase);
        if (newWindowIndex >= 0)
        {
            string functionBody = onclick.Substring(newWindowIndex + "newWindow(".Length);
            string[] tokens = functionBody.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
            result = tokens.Take(2).Select(s => s.Trim(' ', '\''));
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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