我需要从<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
个字符。
答案 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亿字符),我建议使用IndexOf
和Substring
(因为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