假设我有这个字符串:
"param1,r:1234,p:myparameters=1,2,3"
......我想把它分成:
param1
r:1234
p:myparameters=1,2,3
我使用了分割功能,当然它会在每个逗号分割它。有没有办法使用正则表达式执行此操作,还是我必须编写自己的拆分函数?
答案 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命名空间中。
答案 5 :(得分:0)
你的意思是:string [] str = System.Text.RegularExpression.Regex.Spilt(“param1,r:1234,p:myparameters = 1,2,3”,@“\,”);