用于在字符串中查找数字的正则表达式

时间:2012-03-29 09:01:00

标签: c# regex

我有以下字符串格式:

session=11;reserID=1000001

如何获取数字的字符串数组?

我的代码:

 var value = "session=11;reserID=1000001";
 var numbers =  Regex.Split(value, @"^\d+");

5 个答案:

答案 0 :(得分:2)

你可能在正确的轨道上但却忘记了角色类:

Regex.Split(value, @"[^\d]+");

您也可以使用相同的\D+缩短编写时间。

但是,您在返回的数组的开头会得到一个空元素,因此在使用结果时要小心。遗憾的是,Regex.Split()没有一个删除空元素的选项(String.Split会这样做)。解决问题的方法不是很好:

Regex.Replace(value, @"[^\d;]", "").Split(';');

基于分号实际上是您要分割的相关部分的假设。

快速PowerShell测试:

PS> 'session=11;reserID=1000001' -replace '[^\d;]+' -split ';'
11
1000001

另一种选择是跳过元素:

Regex.Split(...).Skip(1).ToArray();

答案 1 :(得分:1)

Regex
 .Matches("session=11;reserID=1000001", @"\d+") //match all digit groupings
 .Cast<Match>() //promote IEnumerable to IEnumerable<Match> so we can use Linq
 .Select(m => m.Value) //for each Match, select its (string) Value
 .ToArray() //convert to array, as per question

答案 2 :(得分:0)

.Net内置功能而不使用RegEx.Try System.Web.HttpUtility.ParseQueryString,传递字符串。您需要引用System.Web程序集,但不应该需要Web上下文。

  var value = "session=11;reserID=1000001";
  NameValueCollection numbers = 
      System.Web.HttpUtility.ParseQueryString(value.Replace(";","&"));

答案 3 :(得分:0)

var numbers =  Regex.Split(value, @".*?(.\d+).*?");

或 返回每个数字:

var numbers =  Regex.Split(value, @".*?(\d).*?");

答案 4 :(得分:0)

我将从另一个问题重新使用我的代码:

    private void button1_Click(object sender, EventArgs e)
    {
        string sauce = htm.Text; //htm = textbox
        Regex myRegex = new Regex(@"[0-9]+(?:\.[0-9]*)?", RegexOptions.Compiled);
        foreach (Match iMatch in myRegex.Matches(sauce))
        {
            txt.AppendText(Environment.NewLine + iMatch.Value);//txt= textbox
        }

    }

如果你想玩正则表达式这是一个很好的网站:http://gskinner.com/RegExr/ 他们还有一个桌面应用程序:http://gskinner.com/RegExr/desktop/ - 它使用adobe air,所以先安装它。