У меня есть строка текста, которая выглядит примерно так:
...],null,null,
],
["Tuesday",["8AM–5:30PM"]
,null,null,"2018-09-25",1,[[8,0,17,30]
]
,0]
,["Wednesday",["8AM–5:30PM"]
,null,null,"2018-09-26",1,[[8,0,17,30]
]
,0]
,["Thursday",["8AM–5:30PM"]
,null,null,"2018-09-27",1,[[8,0,17,30]
],x,y,[[[.....
Я знаю, что это заканчивается тремя последовательными левыми скобками.
Я пишу регулярное выражение, чтобы захватить все массивы, начиная с первого дня до конца массива последнего дня, но у меня возникают проблемы с получением слишком большого количества возвращаемых данных.
val regEx = """[a-zA-Z]*(day)(?s)(.*)(\[\[\[\")""".r
Я использую (?s)(.*), чтобы зафиксировать тот факт, что между дневными массивами могут быть символы новой строки.
По сути, это захват всего текста после первого дня, а не остановка на [[[.
Как я могу решить эту проблему?





По умолчанию регулярное выражение Scala привязано, но ваша текстовая строка не заканчивается целевым [[[. После этого есть еще кое-что, так что вы хотите, чтобы это было незакрепленным.
Вы помещаете текст day в группу захвата, что кажется довольно бессмысленным, поскольку вы теряете часть, которая определяет, с какого дня вы начинаете.
Зачем помещать закрывающий [[[ в группу захвата? Я не вижу его цели.
Ваш шаблон регулярного выражения заканчивается одинарной кавычкой, ", но этого нет в строке образца, поэтому этот шаблон вообще не будет соответствовать, даже если вы утверждаете, что он «захватывает все ... вместо того, чтобы останавливаться на [[[». Вы должны убедиться, что код, который вы публикуете, не соответствует тому, что вы описываете.
В заголовке вашего вопроса упоминается «вложенные массивы», но нет массивов, вложенных или иных. У вас есть String, который вы пытаетесь разобрать. Возможно что-то вроде этого:
val str = """Tuesday",["8AM–5:30PM"]
,null,null,"2018-09-25",1,[[8,0,17,30]
]
,0]
,["Wednesday",["8AM–5:30PM"]
,null,null,"2018-09-26",1,[[8,0,17,30]
]
,0]
,["Thursday",["8AM–5:30PM"]
,null,null,"2018-09-27",1,[[8,0,17,30]
],x,y,[[[....."""
val regEx = """([a-zA-Z]*day)(?s)(.*)\[\[\[""".r.unanchored
str match {
case regEx(a,b) => s"-->>$a$b<<--"
case _ => "nope"
}
I know this ends with three consecutive left brackets.
I'm writing a regex to grab this, but having trouble getting too much returned
Если вам просто нужно взять этот [[[, это можно сделать, как показано ниже:
val str = """Tuesday",["8AM?5:30PM"]
,null,null,"2018-09-25",1,[[8,0,17,30]
]
,0]
,["Wednesday",["8AM?5:30PM"]
,null,null,"2018-09-26",1,[[8,0,17,30]
]
,0]
,["Thursday",["8AM?5:30PM"]
,null,null,"2018-09-27",1,[[8,0,17,30]
],x,y,[[[....."""
scala> val regEx = """\[\[\[""".r
regEx: scala.util.matching.Regex = \[\[\[
scala> regEx.findFirstIn(str).get
res20: String = [[[
Если у вас больше [[[ в str, вы можете использовать regEx.findAllIn(str).toArray, который возвращает
.
Array("[[[",....)
scala> regEx.findAllIn(str).toArray
res22: Array[String] = Array([[[)
Итак, что именно вам нужно извлечь из текста выше?