Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#正则表达式拆分-方括号内的所有内容_C#_Regex_Split - Fatal编程技术网

C#正则表达式拆分-方括号内的所有内容

C#正则表达式拆分-方括号内的所有内容,c#,regex,split,C#,Regex,Split,我目前正在尝试在C#(最新的.NET和Visual Studio 2008)中拆分一个字符串,以便检索方括号内的所有内容并丢弃剩余文本 例如:“H1受体拮抗剂[HSA:3269][路径:hsa04080(3269)]” 在本例中,我感兴趣的是将“HSA:3269”和“路径:hsa0480(3269)”放入字符串数组中 如何做到这一点?Split在这里帮不了你;您需要使用正则表达式: // using System.Text.RegularExpressions; // pattern = any

我目前正在尝试在C#(最新的.NET和Visual Studio 2008)中拆分一个字符串,以便检索方括号内的所有内容并丢弃剩余文本

例如:“H1受体拮抗剂[HSA:3269][路径:hsa04080(3269)]”

在本例中,我感兴趣的是将“HSA:3269”和“路径:hsa0480(3269)”放入字符串数组中


如何做到这一点?

Split
在这里帮不了你;您需要使用正则表达式:

// using System.Text.RegularExpressions;
// pattern = any number of arbitrary characters between square brackets.
var pattern = @"\[(.*?)\]";
var query = "H1-receptor antagonist [HSA:3269] [PATH:hsa04080(3269)]";
var matches = Regex.Matches(query, pattern);

foreach (Match m in matches) {
    Console.WriteLine(m.Groups[1]);
}
产生你的结果。

试试这个

string mystr = "Hello my name is  {robert} and i live in  {florida}";

List<string> myvariables = new List<string>();
while (mystr.Contains("{"))
{
    myvariable.Add(mystr.Split('{', '}')[1]);
    mystr = mystr.Replace("{" + mystr.Split('{', '}')[1] + "}", "");
};
string mystr=“你好,我的名字是{robert},我住在{florida}”;
List myvariables=new List();
while(mystr.Contains(“{”))
{
Add(mystr.Split('{','}')[1]);
mystr=mystr.Replace(“{”+mystr.Split(“{”,“}”)[1]+“}”,”);
};

这样,我将拥有一个包含robert和florida的数组。

在3.5中,MatchCollection枚举器仍然以对象的形式返回Match,您觉得这很尴尬吗?无论如何,更好的正则表达式匹配可能是[([^]]*)]为了安全起见:-)@chakrit:1.是的,但由于向后兼容的原因,这是不能更改的。但真的很遗憾。微软应该有勇气像Python 3一样:永远抛弃2.0之前的一切,引入突破性的更改。但这不会发生…@chakrit:2。这确实是我的第一个版本(我通常使用显式组)但我重新考虑了一下,因为表达完全相同的模式(出于所有实际目的)更为冗长。使用更隐式的字符类和非语法量词是没有风险的。@KonradRudolph-我得到了这个“[HSA:3269]”……如果我想要,正则表达式是什么“HSA:3269”。没有方括号?此代码假定括号总是完全匹配的(您在
{
之前从未有过
}
,您也从未有过
{
连续两次。这也是非常低效的,因为它不必要地多次拆分字符串。像另一个答案一样使用正则表达式将更加高效和健壮。