【发布时间】:2026-01-16 17:35:01
【问题描述】:
我知道这里有很多 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(\[.*?\]),这是我从python manual 获得的,但对此进行的各种尝试都不起作用。
唯一的问题是上面的代码也返回[THIS2CAN2Have-SymbolsAndNumbers0],我不想要这个,因为它被括号括起来了。
重要的是,我卡住的地方是方括号和圆括号之间可以有文本和数字,如下例所示:(blah[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])' 来自其他输出,而不是在圆括号中。
【问题讨论】:
-
根据您的新要求尝试
(?:\[[^]]*]|\([^)[]*\[[^)]*\))