考虑以下几点:
a;b{c;d;}e{f;}
我怎样才能像这样把它分成三组:
Group 1: a;
Group 2: b{c;d;}
Group 3: e{f;}
我正在学习正则表达式,我想知道是否可以在表达式中包含一个 if-then-else 类型的逻辑。
我现在拥有的:
(.*?{.*?})
这会像这样创建两个组:
Group 1: a;b{c;d;}
Group 2: e{f;}
这不是我想要的;和 b{c;d;} 合并。
伪if-then-else:
- 选择所有字符,直到出现分号或开 curl 括号。
- 如果出现分号则停止并完成组。
- 否则如果打开花括号则继续选择所有字符 直到结束大括号。
谢谢。
请您参考如下方法:
使用re.findall
>>> re.findall(r'[^;{]+;?(?:{[^}]*})?', 'a;b{c;d;}e{f;}')
['a;', 'b{c;d;}', 'e{f;}']
或
这个比较合适。
>>> re.findall(r'[^;{]+;|[^;{]+(?:{[^}]*})?', 'a;b{c;d;}e{f;}')
['a;', 'b{c;d;}', 'e{f;}']
[^;{]+否定字符类匹配任何字符但不匹配;或{一次或多次.|或者[^;{]+任何字符但不属于 ;或{后跟一个(?:{[^}]*})?可选的花括号 block 。
