Я знаю, что здесь так много вопросов о регулярном выражении на Python, я просто не могу понять свой конкретный вопрос, даже с примерами.
Я пытался использовать regex101 , но он просто не щелкает.
У меня есть эти предложения:
[Hi]-THISISALOADOFTEXT-[text]
I-X-(blah[THIS2CAN2Have-SymbolsAndNumbers0])-ABCD-{x}A-AB
A-[This can 4 have any X1 rubbish in it]-ABCDDS-OH
A-F{a}R-(textnumber1)-AB-[ThisIsText123]-P-{d}C-(ThisCanHaveNumbers1)-W-[ThisIsSymbolsText123]
Я просто хочу вытащить то, что находится между квадратными скобками, за исключением случаев, когда квадратные скобки заключены в круглые скобки (округлые скобки).
Итак, в приведенном выше примере он вернет:
[Hi], [text]
...nothing returned for line 2...
[This can 4 have any X1 rubbish in it]
[ThisIsText123], [ThisIsSymbolsText123]
Он почти работает с этим кодом:
import re
pattern = re.compile(r'(\[.*?\])')
regex = re.findall(pattern,text)
Я пытался включить «не» следующим образом: ?!A-Za-z0-9(\[.*?\])
, которое я получил из руководства по питону , но различные попытки этого не сработали.
Единственная проблема в том, что приведенный выше код также возвращает [THIS2CAN2Have-SymbolsAndNumbers0], я не хочу этого, так как он заключен в скобки.
Важно то, что я застреваю в том, что между квадратными и круглыми скобками может быть текст и цифры, как в этом примере: (бла [THIS2CAN2Have-SymbolsAndNumbers0])
Может кто-нибудь помочь?
В качестве дополнительного примечания, просто к вашему сведению, конечная цель, как только я выясню, регулярное выражение, состоит в том, чтобы включить в цикл, который говорит:
- Для каждого предложения найти текст в квадратных скобках
- Если квадратные скобки не заключены в круглые скобки (округленные скобки), выполните одну процедуру.
- квадратные скобки elif, заключенные в скобки, выполняют другую процедуру.
Редактировать 1:
Как я могу расширить это, чтобы для последовательностей, имеющих квадратные скобки в скобках, возвращалась полная фраза в скобках. Так, например, входные последовательности:
[Hi]-THISISALOADOFTEXT-[text]
I-X-(blah[THIS2CAN2Have-SymbolsAndNumbers0])-ABCD-{x}A-AB
A-[This can 4 have any X1 rubbish in it]-ABCDDS-OH
A-F{a}R-(textnumber1)-AB-[ThisIsText123]-P-{d}C-(ThisCanHaveNumbers1)-W-[ThisIsSymbolsText123]
Будет выводить:
[Hi], [text]
(blah[THIS2CAN2Have-SymbolsAndNumbers0])
[This can 4 have any X1 rubbish in it]
[ThisIsText123], [ThisIsSymbolsText123]
таким образом, чтобы я мог выполнять другие подпрограммы для вывода с закругленными скобками '(blah[THIS2CAN2Have-SymbolsAndNumbers0])'
из других выходов, а не в закругленных скобках.