使用LINQ解析字符串中的数字

iLe*_*ing 10 c# linq string linq-to-objects c#-4.0

是否有可能编写一个查询,我们从任何给定的字符串中获取所有可以解析为int的字符?

例如,我们有一个字符串,如: "$%^DDFG 6 7 23 1"

结果必须是 "67231"

甚至更轻微一点:我们只能获得前三个数字吗?

Car*_*ñoz 22

这会给你你的字符串

string result = new String("y0urstr1ngW1thNumb3rs".
    Where(x => Char.IsDigit(x)).ToArray());
Run Code Online (Sandbox Code Playgroud)

对于.Take(3)之前使用的前3个字符ToArray()

  • 我不记得是谁首先回答了这个解决方案.无论如何我也在这里投票.除了艾伦有超过10k的分数. (2认同)

Ala*_*lan 11

以下应该有效.

var myString = "$%^DDFG 6 7 23 1";

//note that this is still an IEnumerable object and will need
// conversion to int, or whatever type you want.
var myNumber = myString.Where(a=>char.IsNumber(a)).Take(3);
Run Code Online (Sandbox Code Playgroud)

目前尚不清楚您是否希望23将其视为单个数字序列或2个不同的数字.我上面的解决方案假设您希望得到最终结果672

  • 您可以将where写为`.Where(char.IsNumber)`我认为因为它接受一个char并返回一个bool - 不需要lamda. (3认同)