как разделить строку с разделителем с неэкранированным символом разделителя - PullRequest
0 голосов
/ 08 июня 2019

Я хочу разбить строку с (ex: |) разделителем. Здесь моя проблема - строка содержит escape-символы. Как мне нужно удалить разделитель внутри esacape символа.

Данные выглядят так:

null | 123456 | xxx12345 | 123 | -11234 | 123 | 2000-01-01 | XXX | 01 | 0.000000000000 | 0.000000000000 | 0.000000000000 | 0.000000000000 | "AAA | Группа данных AAA (AAA Inc)" | null | 2000-01- 01 | нуль | нуль | хх

val delimit='|'
val inputData = 'null|123456|xxx12345|123|-11234|123|2000-01-01|XXX|01|0.000000000000|0.000000000000|0.000000000000|"AAA |AAA Data Group (AAA Inc)"|null|-|2000-01-01|-|null|null|xx'
inputData.split(delimit).map(x=>{println(x)})

Я ожидал результата:

null
123456
xxx12345
123
-11234
123
2000-01-01
XXX
01
0.000000000000
0.000000000000
0.000000000000
"AAA AAA Data Group (AAA Inc)"
null
2000-01-01
null
null
xx

но фактический результат: \ n

null
123456
xxx12345
123
-11234
123
2000-01-01
XXX
01
0.000000000000
0.000000000000
0.000000000000
"AAA 
AAA Data Group (AAA Inc)"
null
2000-01-01
null
null
xx

1 Ответ

0 голосов
/ 08 июня 2019

split принимает регулярное выражение, поэтому вы можете использовать правильное регулярное выражение для разделения, только если | не находится внутри кавычек:

val inputData = """null|123456|xxx12345|123|-11234|123|2000-01-01|XXX|01|0.000000000000|0.000000000000|0.000000000000|"AAA |AAA Data Group (AAA Inc)"|null|-|2000-01-01|-|null|null|xx"""

inputData.split("\|(?=([^"]*"[^"]*")*[^"]*$)")

// Array(null, 123456, xxx12345, 123, -11234, 123, 2000-01-01, XXX, 01, 0.000000000000, 0.000000000000, 0.000000000000, "AAA |AAA Data Group (AAA Inc)", null, -, 2000-01-01, -, null, null, xx)

Я позаимствовал регулярное выражение из этого вопроса .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...