我知道这里有很多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)
我试图合并这样的'not':python manual中的?!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])'
上而不是在圆括号中执行不同的子例程。
答案 0 :(得分:3)
您可以使用以下两种模式:
\[[^]]+\](?!\))
\[[^]]+\](?=\))
根据您的新要求,您可以使用:
\([^[]+\[[^]]+\]\)
我的答案假设括号是平衡的,并且结尾)
紧跟]
。
在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])