请考虑以下事项:
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:
感谢。
答案 0 :(得分:2)
使用re.findall
>>> re.findall(r'[^;{]+;?(?:{[^}]*})?', 'a;b{c;d;}e{f;}')
['a;', 'b{c;d;}', 'e{f;}']
OR
这个更合适。
>>> re.findall(r'[^;{]+;|[^;{]+(?:{[^}]*})?', 'a;b{c;d;}e{f;}')
['a;', 'b{c;d;}', 'e{f;}']
[^;{]+
否定了与任何字符匹配但不匹配;
或{
一次或多次的字符类。
|
或
[^;{]+
任何字符,但不是;或{
后跟
(?:{[^}]*})?
可选花括号块。
答案 1 :(得分:1)
(?<=;)(?![^{]*})|(?<=}(?!$))
您可以使用此功能与regex
模块进行拆分,因为re
不支持0 width assertions
处的拆分。
import regex
x="a;b{c;d;}e{f;}"
print regex.split(r"(?<=;)(?![^{]*})|(?<=}(?!$))",x,flags=regex.VERSION1)
输出:['a;', 'b{c;d;}', 'e{f;}']
参见演示。