正则表达式匹配括号中的字符串
问题描述:
我想正则表达式写到具有以下格式正则表达式匹配括号中的字符串
12740(34,12)的字符串[ABC(A1B2C3)(a2b3c4)......] myId123
目前,我有这样的事情
\((?P<expression>\S+)\)
但有了这个,我可以只收集方括号中的字符串。
是否有无论如何我可以捕捉方括号前的整数,还有方括号内的字符串。
小括号内的字符串数量将不会相同。我也可以有一个字符串,它看起来像这样
10(3,2),[ABC(A1B2C3)] myId1
我知道我可以写使用蛮力上述表达一个简单的正则表达式。但任何人都可以请帮我写一个方括号内的字符串数量不断变化。
((?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)
+0
中工作。 。非常感谢您的回答。 – sjaymj62
你不能使用're'的单个正则表达式来捕获任意数量的组。您在比赛中只有与该模式中定义的数量相同的组。 –
@WiktorStribiżewohk,删除.. !! –
@WiktorStribiżew这是一个愚蠢的问题(无论OP是否意识到)每个“用正则表达式解析HTML/XML”的问题。我们没有一个规范的“正则表达式/ CFG”问题来关闭它们吗?也许我们应该。 –