需要有关正则表达式的帮助

时间:2011-03-18 10:32:30

标签: 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(); // if not given, SizeUnit is percentage
}

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

3 个答案:

答案 0 :(得分:4)

\d与'。'不匹配。请改用[0-9]+(\.[0-9]+)?

答案 1 :(得分:1)

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

  • 匹配多个数字:将+量词应用于\d;
  • 匹配点;由于点具有特殊含义(它与任何字符匹配),因此您需要使用\来转义它;
  • 匹配更多数字;
  • 可能分别使用?(零或一个)和*(零个或多个)量词使点和小数部分可选。

像这样的正则表达式可能适合您的需求:

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

答案 2 :(得分: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个或更多个数字后跟一个'。'后跟零个或多个其他数字。