相关疑难解决方法(0)

Java:拆分以逗号分隔的字符串,但忽略引号中的逗号

我有一个模糊的字符串:

foo,bar,c;qual="baz,blurb",d;junk="quux,syzygy"
Run Code Online (Sandbox Code Playgroud)

我想用逗号分割 - 但我需要在引号中忽略逗号.我怎样才能做到这一点?好像正则表达式方法失败了; 我想我可以在看到引号时手动扫描并进入不同的模式,但是使用预先存在的库会更好.(编辑:我想我的意思是已经是JDK的一部分或已经是Apache Commons等常用库的一部分的库.)

上面的字符串应该分成:

foo
bar
c;qual="baz,blurb"
d;junk="quux,syzygy"
Run Code Online (Sandbox Code Playgroud)

注意:这不是CSV文件,它是包含在具有更大整体结构的文件中的单个字符串

java regex string

238
推荐指数
4
解决办法
18万
查看次数

如何拆分列可能包含的csv,

特定

2,1016,7 /二千○八分之三十一14:22,杰夫达尔加斯6 /二千零十一分之五22:21,http://stackoverflow.com, "科瓦利斯,OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34

如何使用C#将上述信息拆分为字符串,如下所示:

2
1016
7/31/2008 14:22
Geoff Dalgas
6/5/2011 22:21
http://stackoverflow.com
Corvallis, OR
7679
351
81
b437f461b3fd27387c5d8ab47a293d35
34
Run Code Online (Sandbox Code Playgroud)

如您所见,其中一列包含,<=(Corvallis,OR)

// update //基于 C#Regex Split - 引号外的逗号

string[] result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)");
Run Code Online (Sandbox Code Playgroud)

.net c# csv

95
推荐指数
4
解决办法
8万
查看次数

在/不在[]内时拆分字符串

我正在尝试拆分表示XPath的字符串,例如:

string myPath = "/myns:Node1/myns:Node2[./myns:Node3=123456]/myns:Node4";
Run Code Online (Sandbox Code Playgroud)

我需要拆分'/'('/'从结果中排除,就像正常的字符串拆分一样),除非'/'碰巧在'[...]'之内(其中'/'都不是分开,也包括在结果中).

那么正常的事情string[] result = myPath.Split("/".ToCharArray())让我:

result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[.
result[3]: myns:Node3=123456]
result[4]: myns:Node4
Run Code Online (Sandbox Code Playgroud)

results[2]result[3]应主要结合起来,我应该结束了:

result[0]: //Empty string, this is ok
result[1]: myns:Node1
result[2]: myns:Node2[./myns:Node3=123456]
result[3]: myns:Node4
Run Code Online (Sandbox Code Playgroud)

由于我不是非常流利的正则表达式,我已经尝试在拆分后手动将结果重新组合成一个新的数组,但我担心的是,尽管让它在这个例子中起作用是微不足道的,但正则表达式似乎是更好的选择.我得到更复杂的xpaths的情况.

为了记录,我查看了以下问题:正则
表达式拆分字符串保留引号
C#Regex Split - 引号外的引号
拆分具有空格的字符串,除非它们包含在"引号"中?

虽然他们应该足以帮助解决我的问题,但我遇到了一些问题/困惑的方面,阻止他们帮助我.
在前2个链接中,作为正则表达式的新手,我发现它们难以解释和学习.他们正在寻找引用,左右对之间看起来相同,所以把它翻译成[和]让我感到困惑,试错不教我任何东西,而是让我更加沮丧.我可以理解相当基本的正则表达式,但这些答案的作用比我目前理解的要多一点,即使在第一个链接中有解释.
在第三个链接中,我将无法访问LINQ,因为代码将在旧版本的.NET中使用.

c# regex string split

5
推荐指数
2
解决办法
182
查看次数

如果不在引号之间,则在空间拆分

我试过这个:

 +|(?!(\"[^"]*\"))
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我还能做些什么让它发挥作用?顺便说一句,我使用java的string.split().

java regex

4
推荐指数
1
解决办法
3406
查看次数

问题,(?=(?:[^']*'[^']*')*[^']*$)

C#Regex Split - 引号外的逗号

var result = Regex.Split(samplestring, ",(?=(?:[^\"]*\"[^\"]*')*[^\"]*$)");
Run Code Online (Sandbox Code Playgroud)

我有问题要了解它是如何工作的.

具体来说,我不知道这里匹配的是什么?

",(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)")
                     ^
Run Code Online (Sandbox Code Playgroud)

这是不是意味着

有0或更多 (?=(?:[^\"]*\"[^\"]*')

更新样本输入

2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,"Corvallis, OR",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34
Run Code Online (Sandbox Code Playgroud)

使用以下代码进行测试:

string samplestring = "2,1016,7/31/2008 14:22,Geoff Dalgas,6/5/2011 22:21,http://stackoverflow.com,\"Corvallis, OR\",7679,351,81,b437f461b3fd27387c5d8ab47a293d35,34";
Run Code Online (Sandbox Code Playgroud)

c# regex

2
推荐指数
1
解决办法
204
查看次数

标签 统计

regex ×4

c# ×3

java ×2

string ×2

.net ×1

csv ×1

split ×1