[英]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.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
。
這是一個非正則表達式選項:
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.