簡體   English   中英

帶字符串的子字符串,返回字符串中兩個單詞之間的值

[英]Substring with string, returning values between two words in a string

我從 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>之間的所有內容,在這種情況下<END_VIDEO_LIST>

test.mp4|test_3.mp4|test_2.mp4|

有沒有不操作整個字符串的有效方法?

好吧,如果你願意,你可以使用regex

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

第一個捕獲的組( \\1 )就是您想要的。

如果沒有正則表達式(可能效率較低),您可以使用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

這是一個非正則表達式選項:

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>");

注意:驗證您的輸入是明智的!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM