C# 正则表达式来拆分一个字符串

C# 正则表达式来拆分一个字符串,c#,regex,C#,Regex,我有一根像 [123234321,…] 我可以使用正则表达式只提取数字吗 这就是我现在使用的代码 public static string[] Split() { string s = "[123,234,345,456,567,678,789,890,100]"; var temp = s.Replace("[", "").Replace("]", ""); char[] separator = { ',' }; ret

我有一根像 [123234321,…]

我可以使用正则表达式只提取数字吗

这就是我现在使用的代码

 public static string[] Split()
    {
        string s = "[123,234,345,456,567,678,789,890,100]";
        var temp = s.Replace("[", "").Replace("]", "");
        char[] separator = { ',' };
        return temp.Split(separator);

    }

您可以为此使用
string.Split
——不需要正则表达式,但您的代码可以简化:

var nums = s.Split('[', ']', ',');
您可能希望排除返回数组中的空条目:

var nums = s.Split(new[] { '[', ']', ',' }, 
                   StringSplitOptions.RemoveEmptyEntries);

您可以为此使用
string.Split
——不需要正则表达式,但您的代码可以简化:

var nums = s.Split('[', ']', ',');
您可能希望排除返回数组中的空条目:

var nums = s.Split(new[] { '[', ']', ',' }, 
                   StringSplitOptions.RemoveEmptyEntries);

Trim()有一个重载,它接受一个字符

你可以这样做

string s = "[123,234,345,456,567,678,789,890,100]";
var nums = s.Trim('[').Trim(']').Split(',');

Trim()有一个重载,它接受一个字符

你可以这样做

string s = "[123,234,345,456,567,678,789,890,100]";
var nums = s.Trim('[').Trim(']').Split(',');
尝试使用方法

这是一本书

编辑:作为Oded,您可能还想使用。

尝试使用using方法

这是一本书


编辑:作为Oded,您可能还需要使用。

如果要使用正则表达式,请尝试:

string s = "[123,234,345,456,567,678,789,890,100]";            
var matches = Regex.Matches(s, @"[0-9]+", RegexOptions.Compiled);   

但是,正则表达式往往会降低代码的可读性,因此您可能会坚持原来的方法。

如果要使用正则表达式,请尝试:

string s = "[123,234,345,456,567,678,789,890,100]";            
var matches = Regex.Matches(s, @"[0-9]+", RegexOptions.Compiled);   
string s = "[123,234,345,456,567,678,789,890,100]";
MatchCollection matches = Regex.Matches(s, @"(\d+)[,\]]");
string[] result = matches.OfType<Match>().Select(m => m.Groups[1].Value).ToArray();
但是,正则表达式往往会降低代码的可读性,因此您可能会坚持原来的方法。

string s=“[12323434565676787890100]”;
string s = "[123,234,345,456,567,678,789,890,100]";
MatchCollection matches = Regex.Matches(s, @"(\d+)[,\]]");
string[] result = matches.OfType<Match>().Select(m => m.Groups[1].Value).ToArray();
MatchCollection matches=Regex.matches(@“(\d+[,\]]); 字符串[]结果=匹配.OfType()。选择(m=>m.Groups[1]。值)。ToArray();
此处,
@
用于表示逐字字符串文字,并允许转义字符“\”直接用于正则表达式表示法,而无需转义自身“\”

\d
是一个数字,
\d+
表示一个或多个数字。括号表示一组,因此
(\d+)
表示我需要一组数字。(*参见稍后使用的组)

[,\]]
方括号,简而言之,意思是选择我的元素中的任何一个,这样它将选择逗号
或我必须转义的方括号
]

因此,正则表达式将查找后跟
]
的序列数字的表达式。匹配将返回匹配集(我们使用它是因为有多个匹配集),然后我们使用一些LINQ检查每个匹配,并获取索引1组,这是第二个组,“但是我们只创建了一个组?”我们只指定了一个组,第一个组(索引0)是整个正则表达式匹配,在我们的例子中,将包括我们不需要的
]

字符串s=“[123234345656787890100]”;
MatchCollection matches=Regex.matches(@“(\d+[,\]]);
字符串[]结果=匹配.OfType()。选择(m=>m.Groups[1]。值)。ToArray();
此处,
@
用于表示逐字字符串文字,并允许转义字符“\”直接用于正则表达式表示法,而无需转义自身“\”

\d
是一个数字,
\d+
表示一个或多个数字。括号表示一组,因此
(\d+)
表示我需要一组数字。(*参见稍后使用的组)

[,\]]
方括号,简而言之,意思是选择我的元素中的任何一个,这样它将选择逗号
或我必须转义的方括号
]


因此,正则表达式将查找后跟
]
的序列数字的表达式。匹配将返回匹配集(我们使用它是因为有多个匹配集),然后我们使用一些LINQ检查每个匹配,并获取索引1组,这是第二个组,“但是我们只创建了一个组?”我们只指定了一个组,第一个组(索引0)是整个正则表达式匹配,在我们的例子中,将包括我们不需要的
]

虽然您可以而且可能应该使用string.Split。正如其他答案所示,该问题特别询问您是否可以使用正则表达式,是的,您可以:-

var r = new Regex(@"\d+", RegexOptions.Compiled );
var matches = r.Matches("[123,234,345,456,567,678,789,890,100]");

正如其他答案所示,您可以也可能应该使用string.Split,但问题特别询问您是否可以使用正则表达式,是的,您可以:-

var r = new Regex(@"\d+", RegexOptions.Compiled );
var matches = r.Matches("[123,234,345,456,567,678,789,890,100]");

你的代码怎么了?是的,你可以。但是,我想说的是,这正是我编写它的方式,您的解决方案非常好,我可能更喜欢它而不是RegExp方法。您的代码有什么问题吗?是的,您可以。但是,我想说的是,这正是我编写它的方式,您的解决方案非常好,我可能更喜欢它而不是RegExp方法,这可能是一个很好的建议,这不是问题所问的。@Keith-我认为,从实际问题的角度来看实际需求以及如何最好地解决它,是我能给出的最好答案。虽然这可能是一个很好的建议,这不是问题所要问的。@Keith-我认为,从实际问题的角度看实际需求以及如何最好地解决它,是我能给出的最好答案。请注意,在.NET正则表达式中,
\d
匹配的字符超过了
[0-9]
-它将匹配任何Unicode数字(如阿拉伯数字)。请注意,在.NET正则表达式中,
\d
匹配的字符数超过了
[0-9]
——它将匹配任何Unicode数字(如阿拉伯数字)。