Regex для вложенных массивов? - PullRequest
0 голосов
/ 05 октября 2018

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

...],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)(.*), чтобы зафиксировать фактчто между дневными массивами могут быть новые строки.

По сути, это все, что нужно, чтобы извлечь текст из текста, следующего за первым днем, а не останавливаться на [[[.

Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Я знаю, что это заканчивается тремя последовательными левыми скобками .

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

Если вам просто нужно захватить этот [[[, это можно сделать следующим образом:

 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([[[)
0 голосов
/ 05 октября 2018

Регулярное выражение 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"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...