Python正则表达式;方括号内

2024-09-30 22:12:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道这里有太多的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]

我只想拉出方括号之间的内容,除非方括号被圆括号(圆括号)括起来。在

因此在上面的示例中,它将返回:

^{pr2}$

它几乎可以使用以下代码:

import re
pattern = re.compile(r'(\[.*?\])')
regex = re.findall(pattern,text)

我试图像这样合并“not”:?!A-Za-z0-9(\[.*?\]),这是我从python manual得到的,但是各种尝试都没有成功。在

唯一的问题是上面的代码也返回了[THIS2CAN2Have-SymbolsAndNumbers0],我不希望这样,因为它是用括号括起来的。在

重要的是,我陷入困境的地方是,在方括号和圆括号之间可以有文本和数字,就像在这个例子中一样:(blah[THIS2CAN2Have-SymbolsAndNumbers0])

有人能帮忙吗?在

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

  1. 对于每个句子,在方括号中找到文本
  2. 如果方括号没有用括号(圆括号)括起来,请执行一个例程。在
  3. 如果方括号括在括号中,则执行不同的例程。在

编辑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])'”上执行与其他输出不同的子例程,而不是在圆括号中。在


Tags: textabhaveanyhithiscan括号
1条回答
网友
1楼 · 发布于 2024-09-30 22:12:57

您可以使用以下两种模式:

  • 不包括在括号内。\[[^]]+\](?!\))
  • 用括号括起来。\[[^]]+\](?=\))

根据您的新要求,您可以使用:

  • 包含在括号中并包含在匹配中\([^[]+\[[^]]+\]\)

我的答案是假设括号是平衡的,并且右)跟在{}后面。在

在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

印刷品:

^{pr2}$

相关问题 更多 >