我从Telnet缓冲区获取如下字符串:
"<CONNECTED><SENDING_VIDEO_LIST><START_VIDEO_LIST>test.mp4|test_3.mp4|test_2.mp4|<END_VIDEO_LIST><PLAYING_test.mp4_STARTED>"
我想要选择两个指标<START_VIDEO_LIST>
和<END_VIDEO_LIST>
之间的所有内容,在这种情况下,请注意以下内容:
test.mp4|test_3.mp4|test_2.mp4|
有没有一种有效的方法可以不操纵整个字符串?
答案 0 :(得分:6)
好吧,如果您愿意,可以使用regex
:
<START_VIDEO_LIST>([^<]*)<END_VIDEO_LIST>
并且第一个捕获的组(\1
)就是您想要的。
答案 1 :(得分:2)
如果没有正则表达式(可能效率较低),您可以使用String.SubString
和String.IndexOf
等方法;
string s = "<CONNECTED><SENDING_VIDEO_LIST><START_VIDEO_LIST>test.mp4|test_3.mp4|test_2.mp4|<END_VIDEO_LIST><PLAYING_test.mp4_STARTED>";
string start = "<START_VIDEO_LIST>";
string end = "<END_VIDEO_LIST>";
int i1 = s.IndexOf(start);
int i2 = s.IndexOf(end);
string result = s.Substring(i1 + start.Length, i2 - i1 - start.Length);
Console.WriteLine(result);
输出将是;
test.mp4|test_3.mp4|test_2.mp4|
这里有 demonstration
。
答案 2 :(得分:1)
这是一个非正则表达式选项:
string GetContents(string full, string start, string end)
{
int s = full.IndexOf(start) + start.Length;
int e = full.IndexOf(end);
int length = e - s;
//validate the index and length to ensure Substring wont throw an error (unless you want that of course)
if (s < 0 || length > full.Length - s)
return null;
return full.Substring(s, length);
}
你可以这样打电话:
string result = GetContents(input, "<START_VIDEO_LIST>", "<END_VIDEO_LIST>");
注意:有效输入是明智的!