在C#中拆分字符串

时间:2011-03-10 03:42:10

标签: c# .net regex split

假设我有这个字符串:

"param1,r:1234,p:myparameters=1,2,3" 

......我想把它分成:

param1
r:1234
p:myparameters=1,2,3

我使用了分割功能,当然它会在每个逗号分割它。有没有办法使用正则表达式执行此操作,还是我必须编写自己的拆分函数?

6 个答案:

答案 0 :(得分:2)

就个人而言,我会尝试这样的事情:

,(?=[^,]+:.*?)

基本上,使用正向预测来查找逗号,然后使用“键值”对(由键,冒号和更多信息[数据](包括其他逗号)定义。这应取消资格数字之间也有逗号。

答案 1 :(得分:2)

您可以使用;分隔值,以便于使用它。

由于您有,用于分离以及值,因此很难将其拆分。

你有

string str = "param1,r:1234,p:myparameters=1,2,3"

建议使用

string str = "param1;r:1234;p:myparameters=1,2,3"

可以拆分为

var strArray = str.Split(';');

strArray[0];  // contains param1
strArray[1];  // r:1234
strArray[2];  // p:myparameters=1,2,3

答案 2 :(得分:1)

我不确定你如何写一个分裂,知道哪些逗号分裂在那里,老实说。

除非在每种情况下都是固定数字,否则只需使用the String.Split overload that takes an int specifying how many substrings to return at max

如果您要使用逗号分隔的数据并不总是固定数量的项,那么数据本身可能包含文字逗号,它们确实应该被引用。如果您可以以任何方式控制输入,则应该鼓励,并使用an actual CSV parser代替String.Split

答案 3 :(得分:1)

这取决于。您无法使用正则表达式(或其他任何内容)对其进行解析,除非您可以确定将一个组与另一个组分开的一致规则。根据你的样本,我无法清楚地确定这样的规则(虽然我有一些猜测)。系统如何知道p:myparameters=1,2,3是单个项目?例如,如果其后有另一个项目,那么它与1,2,3之间会有什么区别?想出来,你将非常接近解决方案。

如果您能够更改输入字符串的格式,为什么不在组之间确定一致的分隔符? ;将是一个不错的选择。使用类似param1;r:1234;p:myparameters=1,2,3的输入,这些组不会有歧义,而且您可以在;上拆分,而且不需要正则表达式。

答案 4 :(得分:1)

最简单的方法是将分隔符从“,”更改为“|”。然后你可以拆分“|”没问题。但是,如果您无法更改分隔符,那么您可以使用类似于CSV的方式对这些部分进行编码。

CSV文件存在同样的问题......标准是在列周围添加双引号。

例如,您的字符串将是“param1”,“r:1234”,“p:myparameters = 1,2,3”。

然后,您可以使用Microsoft.VisualBasic.FileIO.TextFieldParser进行拆分/解析。您可以将它包含在c#中,即使它位于VisualBasic命名空间中。

TextFieldParser

答案 5 :(得分:0)

你的意思是:string [] str = System.Text.RegularExpression.Regex.Spilt(“param1,r:1234,p:myparameters = 1,2,3”,@“\,”);