如何用正则表达式匹配恰好出现 n 次的行?

How to match a line with exactly n occurrences with regex?

我正在尝试匹配恰好包含两个分号的行(使用 Pythons re 库):

 text;text;text;
 text;text;
 text;text;text;text;
 text;text;

但是,我不知道如何不包括每行超过 2 个分号。 到目前为止,我想到了这个:

(?=.*[;]){2}$

我是这样理解代码的:

(?=.*[;]) 这部分向前看并匹配任何和所有字符,只要后面跟一个分号。使用 {2} 这部分正好匹配 2 次。在第二个分号之后,该行结束 ($).

有什么指点吗?

所以我们想要:

  • 行开始
  • 0 个或更多非分号
  • 分号
  • 0 个或更多非分号
  • 分号
  • 停产

转换为正则表达式我们得到:

^[^;]*;[^;]*;$

对于重复 N 次的一般情况,您可以使用

^([^;]*;){N}$