簡體   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