C# C-使用正则表达式搜索字符串中的数字

C# C-使用正则表达式搜索字符串中的数字,c#,regex,int,C#,Regex,Int,我想从字符串中提取数字,格式如下: string foo="something%4%something2%5%"; 我如何用正则表达式写这个 //pseudocode foo.GetDigits("%"+{int}+"%").ToArray(); 谢谢 您可以使用方法从字符串中获取所有数字,而不是正则表达式 var matches = Regex.Matches(foo, @"%(\d+?)%").Cast<Match>() .Select(

我想从字符串中提取数字,格式如下:

string foo="something%4%something2%5%";
我如何用正则表达式写这个

//pseudocode
foo.GetDigits("%"+{int}+"%").ToArray();

谢谢

您可以使用方法从字符串中获取所有数字,而不是正则表达式

var matches = Regex.Matches(foo, @"%(\d+?)%").Cast<Match>()
                   .Select(m => m.Groups[1].Value)
                   .ToList();
string str = "something%4%something2%5%";
string digitstr = new string(str.Where(r => char.IsDigit(r)).ToArray());
或更短:

string digitstr = new string(str.Where(char.IsDigit).ToArray());

您也可以使用此模式:

(\d+)(?=%)
下面是一个示例代码:untested

MatchCollection mcol = System.Text.RegularExpression.Regex.Matches(foo,"(\d+)(?=%)");

foreach (Match m in mcol)
{
   System.Diagnostic.Debug.Print(m.ToString());
}
此模式将捕获后跟%的所有数字


希望有帮助

相关?这将无法捕获2,因为它前面没有%s。话虽如此,从2是否应该被提取的问题中还不清楚…@Oded GetDigits%++{int}++%让我认为它一定在2%之间,我怀疑something2只是。。。第二件事。对该值的不幸命名=NB我觉得懒惰的事?这里没有必要,因为\d与%.不重叠。如果落选的选民能够解释答案有什么问题,那就太好了?没有建设性的批评,屁股疼的dvs。前几天发生在我身上。。。答案很好,+1。可能是因为你没有提供正则表达式。不过,我更喜欢这个解决方案,因为它完全清楚正在发生的事情。并不是所有的事情都应该或者可以用正则表达式来完成。这会丢失关于哪些数字是连续的信息,尽管从这个问题上不清楚OP是否关心。@Rawling,连续的意思是str=2222aaa222?