#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.
[^()]
Часть соответствует пробелу и всем другим символам, кроме «(» и»)», граница слова соответствует позициям, где одна сторона является символом слова, а другая сторона не является символом слова. Смотрите это для более подробного прочтения.