C# 为什么我不能把绳子分开?

C# 为什么我不能把绳子分开?,c#,regex,C#,Regex,我试图用“.”分割字符串,但它会返回4个空字符串。为什么?在正则表达式中表示“任何字符”。因此,不要使用正则表达式进行拆分-拆分使用: 如果您确实想使用正则表达式,可以使用: string[] substrings = myNumber.Split('.'); @使其成为逐字逐句的字符串文字,以避免您必须避开反斜杠。字符串本身中的反斜杠是正则表达式解析器中点的转义。是正则表达式中的保留字符。如果您确实想匹配句点,请尝试: Regex regex1 = new Regex(@"\."); 但是

我试图用“.”分割字符串,但它会返回4个空字符串。为什么?

在正则表达式中表示“任何字符”。因此,不要使用正则表达式进行拆分-拆分使用:

如果您确实想使用正则表达式,可以使用:

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

@
使其成为逐字逐句的字符串文字,以避免您必须避开反斜杠。字符串本身中的反斜杠是正则表达式解析器中点的转义。

是正则表达式中的保留字符。如果您确实想匹配句点,请尝试:

Regex regex1 = new Regex(@"\.");
但是,您最好只使用
myNumber.Split(“.”)

保持简单,使用方法

它具有允许指定拆分选项的选项:

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


编辑:呃。。。我想Jon Skeet之后不到一分钟也不算太糟糕,无论如何…

最简单的解决方案是:
string[]val=myNumber.Split('.')

您需要在“.”之前放置一个转义字符,如“\\”

正则表达式中的“.”匹配任何字符,因此,如果将4个字符传递给仅带“.”的正则表达式,它将返回四个空字符串。检查常见的操作员

点匹配单个字符,而不关心该字符是什么 是唯一的例外是换行符

资料来源:

因此,您在代码中暗示要在每个字符处拆分字符串

用这个代替

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

您不需要正则表达式,您可以使用string对象的
Split
方法来实现这一点

string substr = num.Split('.');
试一试


在正则表达式模式中,句点字符匹配任何单个字符。如果希望正则表达式与实际句点字符匹配,则必须在模式中转义它,如下所示:

 Regex regex1 = new Regex("[.]");
现在,这个例子对于正则表达式匹配来说有点简单;您可以改为使用String.Split(),它将根据一个或多个静态字符串或字符的出现进行拆分:

@"\."
句点“.”被解释为任何单个字符,而不是文字句点

不使用正则表达式,您只需执行以下操作:

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

@雷蒂德:我给了两个建议,一个是关于你为什么没有告诉我们使用正则表达式,另一个是关于你没有。。。如果您不需要使用正则表达式,为什么要这样做?
字符串子字符串
应该是
字符串[]子字符串
,但是对于编辑来说太小了。@retide:是的,使用正则表达式,您必须使用
@“\”
“\\”
来转义
。我非常喜欢Jon Skeet,24关于字符串拆分的投票?您正在使用的
Split
重载包含
params
关键字。因此,您可以删除
新字符[]{}
,直接指定字符<代码>公共字符串[]拆分(params char[]separator)
。显然这个问题需要更多答案。;-)我刚刚被勒格斯泰处死……你是要让乔恩·斯基特的回答成为答案,还是在等待更多的信息?
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();
 Regex regex1 = new Regex("[.]");
@"\."
string[] substrings = myNumber.Split('.');
string[] substrings = myNumber.Split(".");