2014-09-04 95 views
2

我有一個字符串簡單的正則表達式匹配

String test = @"Lists/Versions/2_.000"; 

我對如何使用正則表達式來做到這一點有點混亂。

我使用的模式

String pattern = @"\D+"; 

對正則表達式的MSDN頁說\ d是「匹配除十進制數字的其他字符」

所以應該不是被返回名單/版本/','2'?

然而其返回

'', '2', '000'

我想字符串只匹配2(或任何整數)。我會怎麼做?

String url = @"Lists/Versions/2_.000"; 
     String pattern = @"\D+"; 

     string[] substrings = Regex.Split(url, pattern);  
     foreach (string match in substrings) 
     { 
      Console.WriteLine("'{0}'", match); 
     } 
+0

十進制數字基本上都是0-9,而不管是否有在他們前面的點...所以\ d基本上是什麼,是不是數字...包括標點和文字 – smerny 2014-09-04 18:29:53

+0

爲什麼會返回兩個?另外你如何使用正則表達式?我得到'Lists/Versions /'和'_. – 2014-09-04 18:33:25

+1

請編輯你的問題,以更詳細地解釋你想匹配什麼,以及什麼規則。 – Robin 2014-09-04 18:35:14

回答

2

您接收問題的原因,是因爲/D是捕捉非數字,所以它檢測到因爲_兩個獨立的數值(2000)。這就是它如何抓取數據。所以你有幾個選擇:

  • string分成可管理的部分,然後錨定到數組。
  • 建立一個更好的模式來分離。

所以問題是,你想解析什麼? 2.00?還是你想分開string中的數字?

我假設你有一個錯字也:

  • \ d匹配一個數字字符。相當於[0-9]。
  • \ D匹配一個非數字字符。相當於[^ 0-9]。
  • \ w匹配任何單詞字符,包括下劃線。相當於 「[A-Za-z0-9_]」。
  • \ W匹配任何非單詞字符。相當於「[^ A-Za-z0-9_]」。

您應該能夠使用:

您應該簡單地做到以下幾點:

string url = @"Lists/Versions/2_.000"; 
var data = Regex.Split(url, @"\D+"); 
Console.WriteLine(@"Value: {0} and Secondary Value: {1}", data[0], data[1]); 

這應該找到的所有整數值,所以它應該提供的輸出:

  • 2
  • 000

哪個應該返回正常string []。我的語法或表達式可能關閉,但您可以爲正則表達式here找到一個很好的備忘單。你還需要確保你檢查數組的邊界。

+0

@smerny是的,監督你的正確。 – Greg 2014-09-04 19:00:33

1

https://dotnetfiddle.net/BU6gp2

using System; 
using System.Text.RegularExpressions; 

public class Program 
{ 
    public static void Main() 
    { 
     String url = @"Lists/Versions/2_.000"; 
     String pattern = @"\D+"; 

     string[] substrings = Regex.Split(url, pattern);  

     Console.WriteLine("'{0}'", substrings[1]); 

    } 
} 
1

請嘗試以下方法:

// using System.Linq; 

String url = @"Lists/Versions/2_.000"; 
String pattern = @"(?<=/)\d+"; 

string[] substrings = Regex.Matches(url, pattern) 
          .Cast<Match>() 
          .Select(_ => _.Value) 
          .ToArray();  
foreach (string match in substrings) 
{ 
    Console.WriteLine("'{0}'", match); 
} 

或者,如果你不需要一個數組。

String url = @"Lists/Versions/2_.000"; 
String pattern = @"(?<=/)\d+"; 

Console.WriteLine("'{0}'", Regex.Match(url, pattern).Value);