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=MA
\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是吗?你是对的,我可以用*。我不知道什么是有效的,什么是无效的。从这个例子中,我假设这是一个预期的数字,但我只是想指出它会做什么和不会做什么。