C# 如何用正则表达式分隔数字和字符?

C# 如何用正则表达式分隔数字和字符?,c#,regex,C#,Regex,我有以下正则表达式字符串 (\d+)(((.|,)\d+)+)?(ms|s| ms| s) 它验证用户是否在毫秒和秒内输入了正确的字符串。 可能值的示例包括 100毫秒 100秒 100毫秒 100秒 52.55秒 对于进一步的操作,我需要分离字符串和数字,例如,如果输入的值是123.45ms,我应该得到123.45和ms 到现在为止,我只得到了数字,字符串丢失了 我可以将数字和字符串分为两个不同的步骤,但我有兴趣立即执行,有什么建议吗?您可以使用组: string s =

我有以下正则表达式字符串

(\d+)(((.|,)\d+)+)?(ms|s| ms| s)
它验证用户是否在毫秒和秒内输入了正确的字符串。 可能值的示例包括

  • 100毫秒
  • 100秒
  • 100毫秒
  • 100秒
  • 52.55秒
对于进一步的操作,我需要分离字符串和数字,例如,如果输入的值是
123.45ms
,我应该得到
123.45
ms

到现在为止,我只得到了数字,字符串丢失了

我可以将数字和字符串分为两个不同的步骤,但我有兴趣立即执行,有什么建议吗?

您可以使用组:

        string s = "123.45ms";
        Match m = Regex.Match(s, @"(\d+([.,]\d+)?) *(ms|s)");

        if (m.Success)
        {
            Console.WriteLine(m.Groups[1]);
            Console.WriteLine(m.Groups[3]);
        }
您可以使用组:

        string s = "123.45ms";
        Match m = Regex.Match(s, @"(\d+([.,]\d+)?) *(ms|s)");

        if (m.Success)
        {
            Console.WriteLine(m.Groups[1]);
            Console.WriteLine(m.Groups[3]);
        }

你很接近。您已经在指定匹配组。看看酒店。

您离酒店很近。您已经在指定匹配组。看看属性。

我认为您确实得到了数字和单位,问题是它被放入了一个比您想象的更大的数组元素中。我建议将您的正则表达式修改为:

(\d+)([\.|,]\d+)?\s?(m?s)
现在,您的数字的整数为1,小数点为2(如果不是,则为空),单位为3。房间稍微整洁了一点,你就再也没有空间了

或者,您可以使用:

(\d+[\.|,]\d+|\d+)\s?(m?s)

如果你总是希望你的数字在索引1,单位在2。

我认为你确实得到了数字和单位,问题是它被放入了一个比你想象的更大的数组元素中。我建议将您的正则表达式修改为:

(\d+)([\.|,]\d+)?\s?(m?s)
现在,您的数字的整数为1,小数点为2(如果不是,则为空),单位为3。房间稍微整洁了一点,你就再也没有空间了

或者,您可以使用:

(\d+[\.|,]\d+|\d+)\s?(m?s)

如果你总是希望你的数字在索引1,单位在2。

不要把
放在字符类中,除非你是故意的,也不需要在字符类中转义
。不要把
放在字符类中,除非你是故意的,也不需要在字符类中转义