簡體   English   中英

C#查找帶有模式的大字符串中的所有子字符串

[英]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.

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