Разделенная запятой строка с разделителями-запятыми, исключая те, которые заключены в квадратные скобки - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть следующая строка для разделения:

Заданная строка:

[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0],[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0],[PSR_Net__123456_A,[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]

Ожидаемые результаты: (3 элемента)

[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR_Net__123456_A,[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]

Я пробовал следующие регулярные выражения, чтобы проанализировать / разделить вышеупомянутую строку:

",(?![^[]*[]])" or ",(?=(((?!]).)*\[)|[^\[\]]*$)"

, но все же я не могу достичь ожидаемых результатов, скорее это дает мне следующие результаты (6 элементов) вместо:

[PSR__123456_A
[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR__123456_A
[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR_Net__123456_A
[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]

Есть ли способ сделать это в Java (RegEx), не разбивая символ String на символ?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Если вы хотите выбрать запятую, когда и что справа должно быть в 2 раза больше открывающей и в 2 раза закрывающей квадратной скобкой, вы можете использовать:

,(?=\[[^[]*\[[^[]*\][^]]*\])

В Java:

String regex = ",(?=\\[[^\\[]*\\[[^\\[]*\\][^]]*\\])";

См. Демоверсию Regex | Демонстрация Java

Что будет соответствовать:

  • , Совпадение
  • (?= Положительный прогноз
    • \[[^[]*\[[^[]*\][^]]+\] совпадения:
    • \[ совпадение [
    • [^[]* класс отрицательных символов не совпадает [
    • \[ совпадение [
    • [^[]* Класс отрицательных символов не соответствует [
    • \] Соответствует ]
    • [^]]* Класс отрицательных символов не соответствует ]
    • \] Совпадение ]
  • ) Закрыть позитивный прогноз
0 голосов
/ 21 декабря 2018

Предполагая, что ваши первые элементы начинаются с [PSR, вы можете использовать регулярное выражение с положительным прогнозом, например:

,(?=\[PSR)

Рабочая демонстрация

С \n в качестве строки замены

Обновление: как Маниш , описанный в его комментарии, вы действительно можете использовать ],[ с ]\n[в качестве замены строки

Рабочая демоверсия

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