正则表达式匹配大括号内的字符串

时间:2017-04-19 12:28:21

标签: python regex

我正在尝试将正则表达式写入具有以下格式的字符串

12740(34,12)[abc(a1b2c3)(a2b3c4)......] myId123

目前,我有类似的东西

\((?P<expression>\S+)\)

但有了这个,我只能捕捉方括号内的字符串。

无论如何,我可以在方括号前捕获整数,也可以在方括号内的字符串中捕获id。

小括号内的字符串数量不一样。我也可以有一个看起来像这样的字符串

10(3,2)[abc(a1b2c3)] myId1

我知道我可以使用蛮力为上面的表达式编写一个简单的正则表达式。但是当方括号内的字符串数量不断变化时,有人可以帮我写一个。

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用^$来捕获信息,分别表示开始和结束:

((?P<front>^\d+)|\((?P<expression>\S+)\)|(?P<id>[a-zA-Z0-9]+)$)

Regex101:

https://regex101.com/r/PoA5k4/1

为了使结果更有用,我将其变成字典:

import re

myStr = "12740(34,12) [abc (a1b2c3) (a2b3c4)......] myId123"
di = {}
for find in re.findall("((?P<front>^\d+)|\((?P<expression>\S+)\)|(?P<id>[a-zA-Z0-9]+)$)",myStr):
    if find[1] != "":
        di["starter"] = find[1]
    elif find[3] != "":
        di["id"] = find[3]
    else:
        di.setdefault("expression",[]).append(find[2])
print(di)