C# 需要正则表达式的帮助吗

C# 需要正则表达式的帮助吗,c#,regex,C#,Regex,我尝试使用如下正则表达式: string Size= "10.5M"; Match m = null; if ((m = (new Regex(@"(\d)([MGTP%]?)", RegexOptions.IgnoreCase).Match(Size))).Success) { Size = m.Groups[1].ToString(); if (m.Groups.Count > 1) SizeUnit = m.Groups[2].ToString();

我尝试使用如下正则表达式:

string Size= "10.5M";
Match m = null;
if ((m = (new Regex(@"(\d)([MGTP%]?)", RegexOptions.IgnoreCase).Match(Size))).Success)
{
    Size = m.Groups[1].ToString();
    if (m.Groups.Count > 1)
        SizeUnit = m.Groups[2].ToString(); // if not given, SizeUnit is percentage
}

但是当我传递该值时,大小显示为10,SizeUnit显示为“”,而不是预期的大小=10.5,SizeUnit=M

A
\d
与“.”不匹配。改用
[0-9]+(\[0-9]+)?

A
\d
与“.”不匹配。改用
[0-9]+(\[0-9]+)?

字符类与数字字符匹配。要将数字与小数部分匹配,如示例中所示,您需要:

  • 匹配多个数字:将
    +
    量词应用于
    \d
  • 匹配点;由于点具有特殊含义(它与任何字符匹配),因此需要使用
    \
    对其进行转义
  • 匹配更多的数字
  • 可以分别使用
    (零或一)和
    *
    (零或多)量词使点和小数部分可选
这样的正则表达式可能适合您的需要:

(\d+\.?\d*)([MGTP%]?)

\d
字符类与数字字符匹配。要将数字与小数部分匹配,如示例中所示,您需要:

  • 匹配多个数字:将
    +
    量词应用于
    \d
  • 匹配点;由于点具有特殊含义(它与任何字符匹配),因此需要使用
    \
    对其进行转义
  • 匹配更多的数字
  • 可以分别使用
    (零或一)和
    *
    (零或多)量词使点和小数部分可选
这样的正则表达式可能适合您的需要:

(\d+\.?\d*)([MGTP%]?)

您的问题是,您的表达式当前只匹配一个数字,而不匹配小数点和后面的数字。我想这样会更好

if ((m = (new Regex(@"(\d*\.?\d*)([MGTP%]?)", RegexOptions.IgnoreCase).Match(Size))).Success)
{
   Size = m.Groups[1].ToString();
   if (m.Groups.Count > 1)
   SizeUnit = m.Groups[2].ToString(); // if not given, SizeUnit is percentage
}

它将至少匹配0个或多个数字,后跟一个“.”,后跟零个或多个其他数字。

您的问题是,您的表达式当前只匹配一个数字,而不匹配小数点和后面的数字。我想这样会更好

if ((m = (new Regex(@"(\d*\.?\d*)([MGTP%]?)", RegexOptions.IgnoreCase).Match(Size))).Success)
{
   Size = m.Groups[1].ToString();
   if (m.Groups.Count > 1)
   SizeUnit = m.Groups[2].ToString(); // if not given, SizeUnit is percentage
}

它将至少匹配0个或多个数字,后面跟一个“.”,后面跟零个或多个其他数字。

这个可能有效:
(\d+.\d+)([MGTP%]?)
这个可能有效:
(\d+.\d+)([MGTP%]?)
你可以使用
*
而不是混合使用
+
。你怎么知道10。无效。5是吗?你是对的,我可以用*。我不知道什么是有效的,什么是无效的。我从示例中假设这是一个预期的数字,但只是试图指出它会做什么和不会做什么。您可以使用
*
而不是混合
+
。您如何知道10。无效。5是吗?你是对的,我可以用*。我不知道什么是有效的,什么是无效的。从这个例子中,我假设这是一个预期的数字,但我只是想指出它会做什么和不会做什么。