[英]C# Find all substring in large string with pattern
考慮我有以下字符串:
jkasdlue as 12&sdaj__3982[source=saj_/29]sj*2&7^;'asj[source=-js/.2]_jsld+=[source=283]
我想在下面獲取字符串數組的輸出:
{"saj_/29","-js/.2","283"}
任何幫助,將不勝感激。 謝謝。
更新
好的。 如果我的問題過於籠統或似乎沒有我的努力,請原諒我。 我需要優化僅接受字母數字字符“-”,“ _”,“。”,“ /”,“:”,“”的模式。 按照下面的建議使用正則表達式。
目前,此正則表達式似乎可以正常工作:
\[source=[A-Za-z0-9-_ \\\/.:]+\]
下一步將每個匹配的子字符串消除,以消除打開標記“ [source =“和關閉標記“]”
有什么更好的主意可以減少該過程嗎?
您只需要\\[source=([A-Za-z0-9-_ \\\\/.:]+)\\]
(如果不需要匹配反斜杠。請刪除\\\\
)並訪問沒有last的值]
和初始[source=
使用match.Groups[1].Value
。
var res = Regex.Matches(str, @"\[source=([A-Za-z0-9-_ \\/.:]+)\]").Cast<Match>().Select(match => match.Groups[1].Value).ToList();
參見C#演示 :
var str = "jkasdlue as 12&sdaj__3982[source=saj_/29]sj*2&7^;'asj[source=-js/.2]_jsld+=[source=283]";
var res = Regex.Matches(str, @"\[source=([A-Za-z0-9-_ \\/.:]+)\]").Cast<Match>().Select(match => match.Groups[1].Value).ToList();
Console.WriteLine(String.Join("\n", res));
結果:
saj_/29
-js/.2
283
請注意,也可以使用環視來獲得結果,但是由於它們“昂貴”,效率低下並且在這里不是必需的,因此我不建議您使用它。 這是正則表達式演示的鏈接:
(?<=\[source=)[A-Za-z0-9-_ \\/.:]+(?=\])
^^^lookbehind^ ^^^^^^ - lookahead
在C#中:
var res = Regex.Matches(str, @"(?<=\[source=)[A-Za-z0-9-_ \\/.:]+(?=\])").Cast<Match>().Select(match => match.Value).ToList();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.