Skip to main content
 首页 » 编程设计

python之正则表达式调节

2024年08月26日26freeliver54

考虑以下几点:

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:

  1. 选择所有字符,直到出现分号或开 curl 括号。
  2. 如果出现分号则停止并完成组。
  3. 否则如果打开花括号则继续选择所有字符 直到结束大括号。

谢谢。

请您参考如下方法:

使用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 。