从字符串的第二行开始-

时间:2018-09-13 06:00:23

标签: c# string

我需要从<ul id="demo"> <li> <a href="#">New Page</a> <ul> <li class="submenuitem"> <a href="#">New Page</a> <ul> <li class="sub_submenuitem"><a href="#">New Page</a></li> <li class="sub_submenuitem"><a href="#">New Page</a></li> </ul> </li> </ul> </li> <li><a href="#">Features</a></li> </ul> 到第二个string字符之间的'\r'进入第二行

这是我字符串中的一个例子

'\r'

我需要取值string str = "@b\r210.190\r\000.000\r\n"; ,但不要包含 210.190个字符。

3 个答案:

答案 0 :(得分:5)

尝试使用Split

  string str = "@b\r210.190\r\000.000\r\n";

  string result = str
    .Split(new char[] { '\r' }, 3)  // split on 3 items at most
    .Skip(1)                        // skip the 1st item 
    .FirstOrDefault();              // take the second item if exists (null if not)

编辑:如果是任意的{em> string(可能是null或包含 10亿字符),我建议使用IndexOfSubstring(因为Split创建了一个数组,该数组可以不需要):

  int from = str == null ? -1 : str.IndexOf('\r');
  int length = from < 0 ? -1 : str.IndexOf('\r', from + 1) - from;

  string result = length >= 0 ? str.Substring(from + 1, length) : null;

答案 1 :(得分:1)

also建议使用Split method,但我认为Dmitry Bychenko的回答可以用更简单的措辞表达:

for

这是一个在线演示:https://ideone.com/6Kedjj

作为Dmitry Bychenko explained,这可能会导致创建长数组,即使您仅对第二项感兴趣。可以通过将输出限制为三个匹配项来防止这种情况:

string result = str.Split('\r')[1];

第一个参数看起来很复杂,但它与chars处于同一数组中,只有一个元素实际上在第一个版本中使用。 (为完整起见,更新的演示:https://ideone.com/TimaHP

答案 2 :(得分:1)

您还可以为此使用正则表达式模式匹配。方法Regex.Match搜索指定正则表达式的首次出现:

string str = "@b\r210.190\r\000.000\r\n";

var resultString = Regex.Match(str, @"(?<=\r).+?(?=\r)").Value;

Console.WriteLine(resultString + " " + resultString.Contains("\r"));

输出:210.190 False