以逗号分隔行,仅当引号之间不包含逗号时

时间:2015-08-19 13:34:15

标签: regex scala

有没有办法在scala中使用split函数,以便用逗号分隔一行但不包含2个双引号中的逗号?

例如,我有以下内容:

x: String = """"??", "hamburger", "ketchup, mayo, mustard", "pizza""""

我试过这个: x.split(',')但它不起作用。然后我考虑删除所有双引号,但仍然无法解决我的问题。

非常感谢任何帮助!

编辑:

以下是我的代码片段,以了解如何将其合并:

val data1 = noheader1.map { line =>
  val values = line._1.split(',') //This is what I am trying to change
  val name = values(2).replaceAll("\"", ""))

我对scala有点新,对regex更是如此,所以有人可以澄清如何在我的代码中编写那个奇怪的正则表达式,以便我可以获得该行逗号分隔单词的ARRAY吗?

3 个答案:

答案 0 :(得分:4)

试试这个!

(?>"(?>\\.|[^"])*?"|(,))

Regex101

答案 1 :(得分:0)

您可以使用正则表达式和findAllIn()来代替split(),例如:

 val x = """"??", "hamburger", "ketchup, mayo, mustard", "pizza""""
 """"[^"]+"""".r.findAllIn(x).toList

这将导致,List(" ??"," hamburger","番茄酱,蛋黄酱,芥末","披萨&#34 ;)

注意:我在示例中使用三引号(""")。

答案 2 :(得分:0)

也许不像其他正则表达式那样优雅,考虑项目之间的分割元素", "等等

x.split("\",\\s+\"")
Array("??, hamburger, ketchup, mayo, mustard, pizza")

然后在结果数组中,head "??应用stripPrefix("\"")last pizza"申请stripSuffix("\"")