2012-03-12 90 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(".");