带字符串的子字符串,返回字符串中两个单词之间的值

时间:2014-04-14 13:47:18

标签: c# .net regex string substring

我从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|

有没有一种有效的方法可以不操纵整个字符串?

3 个答案:

答案 0 :(得分:6)

好吧,如果您愿意,可以使用regex

<START_VIDEO_LIST>([^<]*)<END_VIDEO_LIST>

并且第一个捕获的组(\1)就是您想要的。

答案 1 :(得分:2)

如果没有正则表达式(可能效率较低),您可以使用String.SubStringString.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>");

注意:有效输入是明智的!