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

2024-09-28 17:15:35 发布

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

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

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

现在,我有这样的东西

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

但是有了这个,我只能捕获方括号内的字符串。你知道吗

不管怎样,我可以捕获方括号前的整数,也可以捕获方括号内字符串末尾的id。你知道吗

小括号内的字符串数目将不相同。我也可以有一根这样的线

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

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

提前谢谢


Tags: 字符串id格式整数蛮力abcexpression末尾
1条回答
网友
1楼 · 发布于 2024-09-28 17:15:35

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

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

正则表达式101:

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)

相关问题 更多 >