gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 22:08:46 30 4
gpt4 key购买 nike

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

有人可以帮忙吗?

顺便说一句,仅供引用,一旦我弄清楚正则表达式,最终目标就是合并到一个循环中:

  1. 对于每个句子,查找方括号中的文本
  2. 如果方括号没有用括号(圆括号)括起来,则执行一个例程。
  3. 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])'执行不同的子例程,而不是在圆括号中。

最佳答案

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

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

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

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

我的答案假设括号是平衡的,并且结束的 ) 遵循 ]

在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])

关于Python正则表达式;括号内的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52095109/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com