Многострочное регулярное выражение переопределяет элементы

#regex #scala

#регулярное выражение #scala

Вопрос:

Это моя строка, которую я хочу регулярно выражать:

 (roman)
item(Hello
World)
item(Foo bar)
  

Регулярное выражение "item\(.*\)".r работает только в том случае, n если в нем нет символов.
Я обнаружил, что (?s) это должно помочь.
Но "(?s)item\(.*\)".r включает также второй элемент.

Мой желаемый результат примерно такой List(HellonWorld, Foo bar) . Возможно ли регулярное выражение с такой нотацией? Или что такое нотация, которая позволяет использовать многострочные регулярные выражения?

Ответ №1:

Попробуйте это (для str задано значение вашей строки выше):

 """item(([^)]*))""".r.findAllMatchIn(str).map{_.group(1)}.toList
  

Обычно лучше искать последовательность символов, которые не являются конечным символом, а не любой символ.