从网页获取值c#

时间:2011-01-11 10:36:39

标签: c# html

我有一个包含网页代码的字符串。

这是一个例子:

<input type="text" name="x4B07" value="650" onchange="this.form.x8000.value=this.name;this.form.submit();"/>

<input type="text" name="x4B08" value="250" onchange="this.form.x8000.value=this.name;this.form.submit();"/>

在那个字符串中我想得到'650'和'250'(这个值可以不同)

我该怎么做?

Example:
x4b08  254
x4b07  253
x4b06  252
x4b05  251

6 个答案:

答案 0 :(得分:2)

如果您确信标记永远不会改变(并且您有一个简单的代码段,例如您的示例行),正则表达式可以为您提供这些值,例如:

Regex re = new Regex("name=\"(.*?)\" value=\"(.*?)\""); 
Match match = re.Match(yourString); 
if(match.Success && match.Groups.Count == 3){ 
    String name = match.Groups[1]; 
    String value = match.Groups[2];
}

或者,您可以解析页面内容并查询元素的结果文档,然后提取值。 (C#HTML Parser:Looking for C# HTML parser

答案 1 :(得分:0)

您可以使用正则表达式匹配value="([0-9]*)"

或者您可以使用string.IndexOf查找字符串“value”,然后使用以下几个字符。

答案 2 :(得分:0)

这应该对你有用(假设s包含你要解析的字符串):

string value = s.Substring(s.IndexOf("value=")+7);
value = value.Substring(0, value.IndexOf("\""));

答案 3 :(得分:0)

您的示例有多具体?你还想提取不同长度的字母字符串吗?您想要提取的字符串是否始终是属性?

虽然正则表达式/子字符串方式适用于指定的示例,但我认为它们的扩展性非常差。

我使用解析器解析HTML(请参阅ndtreviv的答案)或者使用XML解析器(如果HTML是有效的XHTML)解析HTML。通过这种方式,你可以获得更好的控制,而且不必因为一大堆正则表达式而烦躁不安。

答案 4 :(得分:0)

如果你有多个这样的控件,你可以创建和 XmlDocument 并迭代它。

答案 5 :(得分:0)

刚刚解决了这个

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(URL);
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream st = resp.GetResponseStream();
StreamReader sr = new StreamReader(st);
string buffer = sr.ReadToEnd();

ArrayList uniqueMatches = new ArrayList();
Match[] retArray = null;
Regex RE = new Regex("name=\"(.*?)\" value=\"(.*?)\"", RegexOptions.Multiline);
MatchCollection theMatches = RE.Matches(buffer);

for (int counter = 0; counter < theMatches.Count; counter++)
{
//string[] tempSplit = theMatches[counter].Value.Split('"');

Regex reName = new Regex("name=\"(.*?)\"");
Match matchName = reName.Match(theMatches[counter].Value);

Regex reValue = new Regex("value=\"(.*?)\"");
Match matchValue = reValue.Match(theMatches[counter].Value);

string[] dados = new string[2];
dados[0] = matchName.Groups[1].ToString();
dados[1] = matchValue.Groups[1].ToString();
uniqueMatches.Add(dados);
}

全力以赴帮助