我如何使用indexof和substring解析特定的字符串
本文关键字:字符串 substring 何使用 indexof | 更新日期: 2023-09-27 18:10:53
int firstTag = source.IndexOf("data-token=");
int lastTag = source.IndexOf("'"href", firstTag);
int startIndex = firstTag + 12;
int endIndex = lastTag + 5;
string authenticityToken = source.Substring(startIndex, endIndex - startIndex);
我要解析的字符串从这里开始:
<a class="bizLink" data-token="-iUzEhgdscgbpj5VMi5zoh54FTeFt8M4mj5nsiodxR5VzZOhniodpj6nFQg0nce3MhUxFSgdxjM4J
jUVzZuNu8o0sREnFSUzISUXzZWh4iodGQfdxR5VzZWh4iodGQfhli6fnce_="
href="
我只想得到"answers"之间的字符串只有这个:
-iUzEhgdscgbpj5VMi5zoh54FTeFt8M4mj5nsiodxR5VzZOhniodpj6nFQg0nce3MhUxFSgdxjM4J
jUVzZuNu8o0sREnFSUzISUXzZWh4iodGQfdxR5VzZWh4iodGQfhli6fnce_=
但是我从我的代码中得到的是我想要的这个长字符串,以及所有其他的文件文本。
同样的方法是使用HTML解析器和查询库。我可以推荐CsQuery,它是。net中的一个类似于jquery的库。您可以使用像a[data-token]
这样的选择器来匹配您的锚,然后提取属性值。
这是做事情的正确方法。
但是,如果你只是想要得到这个属性,并且不再对HTML源做任何事情,那么可能更容易使用正则表达式,但要注意:用正则表达式解析HTML是邪恶的。
如果你想做的只是提取这一条信息,作为对你的信息的特殊测量,你可以使用:
var m = Regex.Match(source, @"data-token's*='s*""(?<token>.+?)""");
var authenticityToken = m.Groups["token"].Value;
但是先试试CsQuery。这是一个更好的方法。
工作示例http://ideone.com/U224iZ
string start = "data-token=";
string end = " href";
string source = "<a class='bizLink' data-token='-iUzEhgdscgbpj5VMi5zoh54FTeFt8M4mj5nsiodxR5VzZOhniodpj6nFQg0nce3MhUxFSgdxjM4JjUVzZuNu8o0sREnFSUzISUXzZWh4iodGQfdxR5VzZWh4iodGQfhli6fnce_=1'" href='";
int firstTag = source.IndexOf(start);
int lastTag = source.IndexOf(end, firstTag );
int startIndex = firstTag + start.Length +1;
int endIndex = lastTag;
string authenticityToken = source.Substring(startIndex, endIndex - startIndex -1);
Console.Write(authenticityToken);
Console.ReadLine();