我有一个包含网页代码的字符串。
这是一个例子:
<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
答案 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);
}
全力以赴帮助