求解正确的正则表达式,问题核心是正则表达式如何获得组的“所有”匹配的内容,而不仅是最后的匹配?

string str = "('k1'='v1';'k2'='v2';123;'k3'='v3')";

我的正则表达式 : (^()([^;]+;)*([^)]+)()$)

我的结果是 :

Full match ('k1'='v1';'k2'='v2';123;'k3'='v3')
Group 1. (
Group 2. 123;
Group 3. 'k3'='v3'
Group 4. )

我想要的结果是

Full match ('k1'='v1';'k2'='v2';123;'k3'='v3')
Group 1. (
Group 2. 'k1'='v1';
Group 3. 'k2'='v2'
Group 4. 123;
Group 5. 'k3'='v3'
Group 6. )

(()(\w+);(\w+);(\w+);(\w+)())

string str = "('k1'='v1';'k2'='v2';123;'k3'='v3';456)";

string str = "('k1'='v1';'k2'='v2';123;'k3'='v3';456;789)";

是不是正则表达式又要 改写成 (()(\w+);(\w+);(\w+);(\w+);(\w+)())

是否只用一个正则表达式 包含所有情况? 自动适配,不用每次增加(\w+); ?

mStr = r'''
(
(?:
(?:\'[a-zA-Z]+\d*\'\s*\=\s*\'[a-zA-Z]+\d*\')
|
(?:\d+)
)
)
'''

把空格和换行去掉就可以了

('k1'='v1';'k2'='v2';123;'k3'='v3')
["'k1'='v1'", "'k2'='v2'", '123', "'k3'='v3'"]

mStr = r'''
(\'[a-zA-Z]+\d*\'\s*\=\s*\'[a-zA-Z]+\d*\')
\W*
(\'[a-zA-Z]+\d*\'\s*\=\s*\'[a-zA-Z]+\d*\')
\W*
(\d+)
\W*
(\'[a-zA-Z]+\d*\'\s*\=\s*\'[a-zA-Z]+\d*\')
'''
不好意思,刚刚没注意你的分组要求
('k1'='v1';'k2'='v2';123;'k3'='v3')
[("'k1'='v1'", "'k2'='v2'", '123', "'k3'='v3'")]