Как разделить строку на скобки «)(«?

#java #regex #string #scala

#java #регулярное выражение #строка #scala

Вопрос:

Ввод:

 val str="(2500 - Analytical Charge Percentage of Monitoring Structure (MS) type Sub-Business Unit (SSBU) : 803.130000000000000000)(388 - Monitoring Structure (MS) type Sub-Business Unit (SSBU) : JzCddaxT)"
 

Хотелось бы, чтобы внутри () были две строки большего размера в качестве элементов массива.
В этом случае, если мы разделяем на «) («:

Ожидаемый результат:

 arr(0) = "(2500 - Analytical Charge Percentage of Monitoring Structure (MS) type Sub-Business Unit (SSBU) : 803.130000000000000000"

arr(1) = "388 - Monitoring Structure (MS) type Sub-Business Unit (SSBU) : JzCddaxT)"
 

Я использую str.split("[\\)\\(]") , но он не работает.

Комментарии:

1. Если вы хотите разделить на «)(«, а не на одну скобку, то вам не следует помещать их в символьный класс. Другими словами, вы должны использовать split("\)\(") .

2. Внутри символьного класса, ) и ( его не нужно экранировать.

3. Более того, вы могли бы использовать (?<=\))(?=\() , если хотите, чтобы скобки не удалялись.

Ответ №1:

 split("[\)\(]")
 

разделится на a ( и на a ) , так что этот (сокращенный) текст:

 "(2500 (MS) Unit (SSBU) : 803.13)(388 (MS) Unit (SSBU) : JzCddaxT)"
 

становится так:

 ["", "2500 ", "MS", " Unit ", "SSBU", " : 803.13", "", "388 ", "MS", " Unit ", "SSBU", " : JzCddaxT"]
 

что, очевидно, не то, что вы хотите.

Поскольку вы, похоже, хотите просто разделить подстроку из 2 символов ")(" , не используйте [ ] символьный класс.

 split("\)\(")
 

что приведет к тому, что вы показали:

 ["(2500 (MS) Unit (SSBU) : 803.13", "388 (MS) Unit (SSBU) : JzCddaxT)"]