繁体   English   中英

需要帮助的正则表达式

[英]Need help with a regular expression

我正在尝试使用这样的正则表达式:

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

\\d与'。'不匹配。 使用[0-9]+(\\.[0-9]+)? 代替。

\\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个或多个数字,后跟一个“。” 后跟零个或多个其他数字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM