Я знаю, что здесь есть слишком много вопросов о регулярном выражении 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(\[.*?\])
, ?!A-Za-z0-9(\[.*?\])
я получил из руководства python, но различные попытки этого не работают.
Единственная проблема заключается в том, что приведенный выше код также возвращает [THIS2CAN2Have-SymbolsAndNumbers0], я не хочу этого, так как он заключен в круглые скобки.
Важно то, что и где я застреваю, заключается в том, что между квадратными скобками и закругленными скобками может быть текст и цифры, как в этом примере: (blah [THIS2CAN2Have-SymbolsAndNumbers0])
Может кто-нибудь помочь?
Как побочная заметка, просто FYI, конечной целью, когда я выясню регулярное выражение, является включение в цикл, который гласит:
Редактирование 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])'
от других выходов, а не в закругленных скобках.
Вы можете использовать два следующих шаблона:
\[[^]]+\](?!\))
\[[^]]+\](?=\))
В соответствии с вашим новым требованием вы можете использовать:
\([^[]+\[[^]]+\]\)
Мой ответ предполагает, что скобки сбалансированы и закрывание )
следует ]
.
В Python:
import re
mytext='''
[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]
'''
print('no ():')
for i in re.findall(r'\[[^]]+\](?!\))',mytext):
print(i)
#do one routine
print('with ():')
for i in re.findall(r'\([^[]+\[[^]]+\]\)',mytext):
print (i)
#do second routine
Печать:
no ():
[Hi]
[text]
[This can 4 have any X1 rubbish in it]
[ThisIsText123]
[ThisIsSymbolsText123]
with ():
(blah[THIS2CAN2Have-SymbolsAndNumbers0])
[THIS2CAN2Have-SymbolsAndNumbers0]
должен быть напечатан последним, поскольку он заключен в квадратные скобки.
(?:\[[^]]*]|\([^)[]*\[[^)]*\))