考虑我有以下字符串:
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 =”和close标记“]”
减少这个过程还有什么好主意吗?
答案 0 :(得分:2)
您只需要\[source=([A-Za-z0-9-_ \\/.:]+)\]
(如果您不需要匹配反斜杠。请移除\\
)并使用{{]
和[source=
初始match.Groups[1].Value
访问该值1}}。
var res = Regex.Matches(str, @"\[source=([A-Za-z0-9-_ \\/.:]+)\]").Cast<Match>().Select(match => match.Groups[1].Value).ToList();
请参阅C# demo:
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
请注意,也可以使用环视来获得结果,但由于它们“昂贵”,效率较低而且在这里没有必要,我不建议使用它。这是指向regex demo的链接:
(?<=\[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();