@Paul_Morte

Как написать регулярное выражение по поиску текста в скобках?

Есть вот такая строчка
AnyAharacters(AnyAharacters&#+-123( Взять только этот текст ))

Как вытащить из неё только текст в последних скобках? "Взять только этот текст".
Я пытаюсь написать регулярку с негативным просмотром назад, но нифигашеньки не получается.
У меня такая логика: Взять всё от открывающихся скобок до закрывающихся, только если где -то сзади (через какое-то кол-во символов) нет открывающихся ковычек. Неправильная наверное.

(?<!.*\()(?<=\().*?(?=\))
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 2
twobomb
@twobomb
let text = str.match(/\([^\(]*\(([^\)]*)/)[1];
Ответ написан
Комментировать
@PavelMos
Не проще ли идти так :
1 любое количество любых символов до сочетание ( и пробела
2 любое количество символов до двух закрывающие скобок, причём в этом выражении сделать группу, в которую последние две скобки не будут входить
После применения регексп, как правило, возвращает сначала всё, что найдено, потом найденные группы по порядку.
Соответственно, будет, например
s='AnyAharacters(((((( AnyAhrr22aracters&#+-123(((( Взять zz(()))только этот текст ))'
r='.*\(\s(.*)\){2}$'
re.match(r,s)
Out[36]: <_sre.SRE_Match object; span=(0, 82), match='AnyAharacters(((((( AnyAhrr22aracters&#+-123(((( >
re.match(r,s)[1]
Out[37]: 'Взять zz(()))только этот текст '
s2="AnyAharacters(AnyAharacters&#+-123( Взять только этот текст ))"
re.match(r,s2)[1]
Out[44]: 'Взять только этот текст '


Но это только если есть конкретный маркер (+пробел. Если будет другое сочетание или в тексте будут еще сочетания (+пробел, может не сработать, нужно что-то сложнее
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы