0

我有一个像 [123,234,321,....]

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

这是我现在使用的代码

 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);

    }
4

6 回答 6

2

您可以使用string.Split它 - 不需要正则表达式,尽管您的代码可以简化:

var nums = s.Split('[', ']', ',');

认为您可能希望在返回的数组中排除空条目:

var nums = s.Split(new[] { '[', ']', ',' }, 
                   StringSplitOptions.RemoveEmptyEntries);
于 2013-03-13T15:24:49.740 回答
1

Trim() 有一个需要一个字符的重载。

你可以这样做。

string s = "[123,234,345,456,567,678,789,890,100]";
var nums = s.Trim('[').Trim(']').Split(',');
于 2013-03-13T15:24:58.807 回答
1

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

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

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

于 2013-03-13T15:28:01.887 回答
0

虽然您可以并且可能应该使用 string.Split 正如其他答案所表明的那样,但该问题专门询问您是否可以使用正则表达式来做到这一点,是的,您可以:-

var r = new Regex(@"\d+", RegexOptions.Compiled );
var matches = r.Matches("[123,234,345,456,567,678,789,890,100]");
于 2013-03-13T21:29:41.787 回答
0
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();

这里@用于表示逐字字符串文字,并允许在正则表达式表示法中直接使用转义字符“\”而不转义自身“\”。

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

[,\]]方括号,简而言之,意味着选择我的任何一个元素,因此它将选择我必须转义的逗号,或方括号。]

所以正则表达式会找到连续数字后跟 a,或的表达式]。Matches 将返回一组匹配项(我们使用它是因为有多个组)然后我们通过每个匹配项 - 使用一些 LINQ - 并获取索引 1 组,即第二组,“但我们只做了一个组?” 我们只指定了一个组,第一个组(索引 0)是整个正则表达式匹配,在我们的例子中,将包括我们不想要的,or 。]

于 2013-03-13T15:28:37.273 回答
0

尝试使用string.Split方法;

string s = "[123,234,345,456,567,678,789,890,100]";
var numbers = s.Split('[',']', ',');
foreach(var i in numbers )
   Console.WriteLine(i);

这是一个DEMO.

编辑:正如 Oded提到的,您可能也想使用StringSplitOptions.RemoveEmptyEntries

于 2013-03-13T15:26:51.347 回答