2012-03-12 20 views
2
string myNumber = "3.44"; 

     Regex regex1 = new Regex("."); 

     string[] substrings = regex1.Split(myNumber); 

     foreach (var substring in substrings) 
     { 
      Console.WriteLine("The string is : {0} and the length is {1}",substring, substring.Length); 
     } 

     Console.ReadLine(); 

我試圖通過「。」分割字符串,但它分裂返回4空字符串。爲什麼?C#爲什麼我不能拆分字符串?

+0

顯然這個問題需要更多的答案。 ;-) – Qtax 2012-03-12 15:25:48

+0

我剛剛被正則化爲死亡... – code4life 2012-03-12 16:17:17

+0

你打算將Jon Skeet的回答標記爲答案還是等待更多信息? – 2012-04-03 18:16:40

回答

27

.表示正則表達式中的「任何字符」。

string[] substrings = myNumber.Split('.'); 

如果你真的要使用正則表達式,你可以使用:

Regex regex1 = new Regex(@"\."); 

@使得它逐字字符串中 - 所以不要分裂使用正則表達式使用String.Split分裂,阻止你避免反斜槓。字符串本身中的反斜槓是正則表達式解析器中點的轉義符。

+0

我應該使用什麼? – retide 2012-03-12 15:04:54

+2

@retide:好吧,我已經給出了兩個建議,一個用於如果你有一些理由你沒有告訴我們使用正則表達式,一個用於如果你沒有...如果你不需要*使用正則表達式,爲什麼這樣做? – 2012-03-12 15:06:12

+0

'string substrings'應該讀取'string [] substrings',但對於編輯而言太小了。 – Rawling 2012-03-12 15:06:15

4

.是正則表達式中的保留字符。如果你硬是要匹配一段時間,嘗試:

Regex regex1 = new Regex(@"\."); 

不過,你最好不要簡單地使用myNumber.Split(".");

3

保持簡單,使用String.Split()方法;

string[] substrings = myNumber.Split('.'); 

an other overload允許指定拆分選項:

public string[] Split(
    char[] separator, 
    StringSplitOptions options 
) 
+1

您正在使用的'Split'的重載具有'params'關鍵字。因此,您可以刪除'new char [] {}',並直接指定charcter。 'public string [] Split(params char [] separator)'。 – 2012-03-12 15:13:12

1

嘗試

Regex regex1 = new Regex(@"\."); 

編輯:呃......我猜喬恩斯基特後一分鐘之內是不是太不好,反正...

6

最簡單的解決方案離子將是:string[] val = myNumber.Split('.');

1

你會想要在「。」之前放置一個轉義字符。 - 喜歡這個 」\\。」

「。」在正則表達式中匹配任何字符,所以如果你只用「。」將4個字符傳遞給正則表達式,它將返回四個空字符串。檢查出this page爲共同的操作員。

4

的點匹配單個字符,而無需關心什麼性格 是。唯一的例外是換行符。

來源:http://www.regular-expressions.info/dot.html

因此,你的暗示在你的代碼在每個字符分割的字符串。

改爲使用它。

string substr = num.Split('.'); 
2

你不需要正則表達式你這樣做,通過使用String對象的方法Split

string myNumber = "3.44"; 
String[] substrings = myNumber.Split("."); 
foreach (var substring in substrings) 
{ 
    Console.WriteLine("The string is : {0} and the length is {1}",substring, substring.Length); 
} 

Console.ReadLine(); 
2

在正則表達式模式中,句點字符匹配任何單個字符。如果你想在正則表達式的實際週期字符匹配,則必須逃出它的模式,就像這樣:

@"\." 

現在,這種情況下是正則表達式匹配稍顯簡單;您可以改爲使用String.Split(),它將基於一個或多個靜態字符串或字符的出現進行分割:

string[] substrings = myNumber.Split('.'); 
2

期間「。」被解釋爲任何單個字符而不是文字週期。

而不是使用正則表達式,你可以只是做:

string[] substrings = myNumber.Split(".");