我有一个字符串 [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);
}
答案 0 :(得分:2)
您可以使用string.Split
- 不需要正则表达式,但您的代码可以简化:
var nums = s.Split('[', ']', ',');
您可能希望在返回的数组中排除空条目:
var nums = s.Split(new[] { '[', ']', ',' },
StringSplitOptions.RemoveEmptyEntries);
答案 1 :(得分:1)
Trim()有一个带有字符的重载。
你可以这样做。
string s = "[123,234,345,456,567,678,789,890,100]";
var nums = s.Trim('[').Trim(']').Split(',');
答案 2 :(得分:1)
如果您想使用正则表达式,请尝试:
string s = "[123,234,345,456,567,678,789,890,100]";
var matches = Regex.Matches(s, @"[0-9]+", RegexOptions.Compiled);
但是,正则表达式往往会降低您的代码的可读性,因此您可能会坚持使用原始方法。
答案 3 :(得分: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 mentioned,您可能也想使用StringSplitOptions.RemoveEmptyEntries
。
答案 4 :(得分: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+)
表示我想要一组数字。 (*见组稍后使用)
[,\]]
方括号表示选择我的元素中的任何一个,因此它将选择逗号,
或方括号]
,我必须逃避。
因此,正则表达式将找到连续数字的表达式,后跟,
或]
。匹配将返回匹配集(我们使用因为有多个集合)然后我们通过每个匹配 - 使用一些LINQ - 并获取索引1组,这是第二组,“但我们只创建了一个组?”我们只指定了一个组,第一个组(索引0)是整个正则表达式匹配,在我们的例子中,它将包括我们不想要的,
或]
。
答案 5 :(得分:0)
虽然你可以并且可能应该使用string.Split,因为其他答案表明,问题特别询问你是否可以用正则表达式来做,是的,你可以: -
var r = new Regex(@"\d+", RegexOptions.Compiled );
var matches = r.Matches("[123,234,345,456,567,678,789,890,100]");