Как извлечь текстовые строки в регулярном выражении в формате (A(B(C)))

#regex

Вопрос:

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

Как мне тогда извлечь some text A , some text B и some text C если они в формате

 some text A ( some text B ( some text C))
 

Пожалуйста, имейте в виду, что в некоторых случаях может быть только

 some text A ( some text B)
 

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

1. Ты пробовал b[^()] b ?

2. some text A ( some text B ( some text C) finish text B) finish text A Возможно ли это? К вашему сведению, у вас либо отсутствует открывающая скобка, либо слишком много закрывающих скобок; не уверен, что это сделано намеренно.

3. О чем some text A (( some text C)) ?

4. Вы хотите проверить, что текст тоже находится в этом формате? Так some text A что следует игнорировать? Комментарий @Alireza хорош, но он не подтвердит, что вы имеете дело с форматом, который вы описали.

5. Что такое регулярное выражение?

Ответ №1:

Вы можете использовать этот шаблон: b[^()] b

Смотрите Демонстрацию регулярных выражений

Объяснение

  • b является word boundary
  • [^()] сопоставьте что-либо один или несколько раз, кроме «(» и «)»

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

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

2. [^()] Часть соответствует пробелу и всем другим символам, кроме «(» и»)», граница слова соответствует позициям, где одна сторона является символом слова, а другая сторона не является символом слова. Смотрите это для более подробного прочтения.