按不同数量的空格,选项卡拆分所有行列

时间:2017-04-27 06:54:24

标签: regex scala split

我在读取的文件中有以下行,然后我找到了常见的分隔符,在这种情况下是空格,之后我将列标题映射到每行的值,然后转换为JSON

id name DOB

1 john doe 2000-01-01

2 jane doe 1990-01-01

列之间有一个或多个空格,我需要拆分每一行,但要将名称保留为一个单元(" john doe"," jane doe"),请注意分隔符也可以是一个或多个选项卡。转换为JSON后,由于id和name之间有三个空格,而name和DOB之间有一个空格,结果不正确

编辑: 通过查找最常见的分隔符找到分隔符:

val delimitersList = List(",", ";", ":", "\\|", "\\t", "-", "_", "\\+",  "-"," ")
val delimiterMap = scala.collection.mutable.LinkedHashMap[String, Int]()
for (a <- delimitersList)
  delimiterMap += a ->(a+"+").r.findAllIn(line).length
 val sortedMap = (delimiterMap.toList sortWith ((x, y) => x._2 > y._2)).take(2)
 val firstDelimiter = sortedMap.head._1.toString

由于

1 个答案:

答案 0 :(得分:1)

匹配以下模式:

  

(\ d +)。*?([a-zA-Z] *?[a-zA-Z] *?)([0-9] + - [\ d] + - [\ d] +)

如果列之间有可变空格和制表符,它将匹配。但它假设名称始终用单个空格分隔

Regex demo