#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)"]