正则表达式匹配由分号分隔的唯一数字

时间:2016-11-07 20:20:21

标签: regex

我正在尝试找出以下输入和规则的正则表达式:

  • 字符串仅包含数字(1-9和10)和分号“;”字符作为分隔符
  • 值的数量可以是1到4
  • 值必须是唯一的

我创建了以下表达式:

idx = np.flatnonzero(~np.isnan(a))
a.ravel()[idx[a.ravel()[idx] < 0]] = -1

涵盖除数字唯一性之外的所有内容。

有效示例:

r,c = np.nonzero(~np.isnan(a))
mask = a[r,c] < 0
a[r[mask],c[mask]] = -1

无效的例子:

^([1-9]|10)(;([1-9]|10)){0,3}$

关于如何仅在值唯一时才能匹配的任何建议?

1 个答案:

答案 0 :(得分:3)

添加使用反向引用的负面预测,以强制实现唯一性:

^([1-9]|10)(?!.*\b\1\b)(;([1-9]|10)(?!.*\b\3\b)){0,3}$

需要使用单词边距\b来阻止110匹配。

使用您的示例查看live demo