【发布时间】:2020-01-11 00:08:30
【问题描述】:
我需要一个正则表达式来使用 Python 根据两个条件匹配一个字符串:
- 一个数字在
,之前出现至少 n 次 - 从条件 1 匹配的数字在
,之后最多出现 m 次
注意:只有一个逗号。
例如:
111,222 n = 3 和 m = 0 应该返回 true,因为 1 在 , 之前出现 3 次或更多次并且在,之后0次
111,212 与 n = 3 和 m = 0 应该返回 false,因为尽管 1 在 @987654329 之前存在 3 次或更多次 @它在,之后出现超过0次
111,212 和 n = 3 和 m = 1 应该返回 true,因为 1 在 , 之前出现 3 次或更多次并且在,之后只有1次
我使用(\d+)\1{n,} 来捕获数字并检查第一个条件。但是我在第二种情况下遇到了麻烦。我试过(\d+)\1{n,},\d*((?!\1)){0,m}\d*,但它不起作用。
我假设正则表达式中, 之后的\d 与不应该出现的捕获组匹配,知道吗?
【问题讨论】:
-
您的规则暗示了
\d{n,},\d{0,m}模式。但它不适用于提供的字符串,所以问题不清楚。 -
(\d)(?:(?:(?!\1)\d)*\1){2}\d*?,(?:(?!\1)\d)*(?:\1(?:(?!\1)\d)*){1}$其中{2}是n-1和{1}是m如看到here -
@WiktorStribiżew 它需要澄清,但我几乎可以肯定它们在两个部分中表示相同的数字 - 所以
1在第一部分出现 3 次,在第二部分出现 0 次(对于第一种情况)。其余情况相同,但输入不同。至少,这是我从用户发布的第二个正则表达式中收集到的。 -
@ctwheels 是的!我刚刚编辑了这个问题。抱歉,不清楚。
-
您使用什么语言/工具?来自regex tag info:“由于正则表达式尚未完全标准化,所有带有此标签的问题还应包含一个指定适用的编程语言或工具的标签。”