C# 正则表达式来拆分一个字符串
我有一根像 [123234321,…] 我可以使用正则表达式只提取数字吗 这就是我现在使用的代码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
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数字(如阿拉伯数字)。