Python正则表达式;括号内的括号

Python正则表达式;括号内的括号,python,regex,parsing,Python,Regex,Parsing,我知道这里有太多python正则表达式的问题,我只是无法理解我的具体问题,即使有例子 我试过使用,但它只是不点击 我有以下几句话: [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

我知道这里有太多python正则表达式的问题,我只是无法理解我的具体问题,即使有例子

我试过使用,但它只是不点击

我有以下几句话:

[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)
我试图像这样合并“not:
?”?!A-Za-z0-9(\[.*?\])
是我从中得到的,但是各种尝试都不起作用

唯一的问题是上面的代码也返回[THIS2CAN2Have-SymbolsAndNumbers0],我不想要它,因为它是用括号括起来的

重要的是,我被卡住的地方是,方括号和圆括号之间可能有文本和数字,如本例所示:(blah[THIS2CAN2Have-SymbolsAndNumbers0])

有人能帮忙吗

作为补充说明,仅供参考,一旦我弄清楚正则表达式,最终目标是将其合并到一个循环中,该循环表示:

  • 对于每个句子,在方括号中查找文本
  • 如果方括号中没有括号(圆括号),请执行一个例程
  • 如果方括号中有括号,则执行另一个例程
  • 编辑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])
    

    您的输出与代码不匹配(假设它工作)<代码>[2此can2 have-symbols和numbers0]应该是最后打印的内容,因为它被括在括号中。。。?在我的机器上是吗?真的吗?否决票?你运行过密码吗?是的,答案是错误的。为什么
    [ThisIsText123]
    是最后一次输出?@FHTMitchell已修复。根据您的新要求,请尝试