На самом деле недостаточно информации для определенного ответа - или, возможно, вы предполагаете, что мы знаем о PDF больше, чем вы. Всегда ли в этих BT...ET
разделах заключены в скобки? Всегда ли один из них? BT
или ET
всегда в начале строки? Если это так, я бы предложил
(?m)^BT[^()]*\((.*?)\)[^()]*?^ET
Если бы я знал, как PDF представляет буквальные скобки, я мог бы, вероятно, придумать что-нибудь более эффективное.
РЕДАКТИРОВАТЬ: Согласно спецификации PDF, буквенные скобки должны быть экранированы с обратной косой чертой, и есть множество других последовательностей обратной косой черты. Итак, попробуйте это:
(?s)\bBT\b[^()]*\(((?:[^()\\]*(?:\\.[^()\\]*)*))\)
Эта часть - [^()\\]*(?:\\.[^()\\]*)*
- соответствует блоку текста, который может содержать экранированные символы (включая парены), но не экранированные. Я знаю, это выглядит некрасиво, но это наиболее эффективный способ, поскольку Python не поддерживает атомарные группы или собственнические квантификаторы.
(?s)
позволяет .
соответствовать символам новой строки, а \bBT\b
гарантирует, что BT
не является частью более длинного "слова". Я достаточно уверен, что это все, что мне нужно, чтобы соответствовать всему фактическому текстовому содержимому, поэтому я не беспокоюсь о сопоставлении материала после заключительного слова.