我有一个这样的字符串:
<div class="fsxl fwb">Myname<br />
那么如何获得字符串Myname?
这是我的代码:
public string name(string link)
{
WebClient client = new WebClient();
string htmlCode = client.DownloadString(link);
var output = htmlCode.Split("<div class="fsxl fwb">","<br />");
return output.ToString();
}
但问题是"<div class="fsxl fwb">"
它会成为2个字符串"<div class=", ">" and fsxl fwb
所以如何修复它?
答案 0 :(得分:0)
您可以通过解析HTML来解决这个问题,这通常是最佳选择。
快速解决方案是使用正则表达式来获取字符串。这个会做:
<div class="fsxl fwb">(.*?)<br \/>
它将捕获div
和第一个<br />
之间的输入。
这将是获得答案的C#代码:
string s = Regex.Replace
( "(.*)<div class=\"fsxl fwb\">Myname<br />"
, "<div class=\"fsxl fwb\">(.*?)<br \\/>(.*)"
, "$2"
);
Console.WriteLine(s);
答案 1 :(得分:0)
以下是对您的代码的快速修复:
var output = htmlCode.Split(
new [] { "<div class=\"fsxl fwb\">", "<br />"},
StringSplitOptions.RemoveEmptyEntries);
return output[0];
它正确地转义引号并使用Split方法的有效override。
答案 2 :(得分:0)
var a = @"<div class='fsxl fwb'>Myname<br />";
var b = Regex.Match(a, "(?<=>)(.*)(?=<)");
Console.WriteLine(b.Value);
答案 3 :(得分:0)
使用正则表达式:
public string name(string link)
{
WebClient client = new WebClient();
string htmlCode = client.DownloadString(link);
Regex regex = new Regex("<div class=\"fsxl fwb\">(.*)<br />");
Match match = regex.Match(htmlCode);
string output = match.Groups[1].ToString();
return output;
}
答案 4 :(得分:0)
如果你想避免正则表达式,你可以使用这个扩展方法来获取两个其他字符串之间的文本:
public static string ExtractBetween(this string str, string startTag, string endTag, bool inclusive)
{
string rtn = null;
var s = str.IndexOf(startTag);
if (s >= 0)
{
if (!inclusive)
{
s += startTag.Length;
}
var e = str.IndexOf(endTag, s);
if (e > s)
{
if (inclusive)
{
e += startTag.Length +1;
}
rtn = str.Substring(s, e - s);
}
}
return rtn;
}
示例用法(请注意,您需要将转义字符添加到字符串中)
var s = "<div class=\"fsxl fwb\">Myname<br />";
var r = s.ExtractBetween("<div class=\"fsxl fwb\">", "<br />", false);
Console.WriteLine(r);