用连字符

时间:2017-06-14 09:30:38

标签: c# regex

我正在尝试匹配以下模式。

至少3个小组'由连字符分隔的字母数字字符。

例如:ABC1-AB-B5-ABC1

每个组的长度可以是任意数量。

我尝试了以下内容:

^(\w*(-)){3,}?$

这给了我想要的程度。

ABC1-AB-B5-0001失败,ABC1-AB-B5-0001-通过。

我不希望将尾随连字符作为要求。

我无法弄清楚如何修改表达式。

4 个答案:

答案 0 :(得分:3)

您的^(\w*(-)){3,}?$模式甚至允许使用-----这样的字符串,因为此处唯一需要的模式是连字符:\w*可能与 0 字符匹配。由于这个原因,-可能都是前导和尾随。

您可以使用

\A\w+(?:-\w+){2,}\z

<强>详情:

  • \A - 字符串开头
  • \w+ - 1个单词字符(即字母,数字或_符号)
  • (?:-\w+){2,} - 2个或更多序列:
    • - - 一个连字符
    • \w+ - 一个或多个单词字符
  • \z - 字符串的结尾。

请参阅regex demo

或者,如果您不想允许_

\A[^\W_]+(?:-[^\W_]+){2,}\z

或仅允许使用ASCII字母和数字:

\A[A-Za-z0-9]+(?:-[A-Za-z0-9]+){2,}\z

答案 1 :(得分:1)

可以是这样的:

^\w+-\w+-\w+(-\w+)*$

答案 2 :(得分:1)

^(\w+-){2,}(\w+)-?$

匹配2个以连字符分隔的组,然后匹配可能以连字符结尾的单个组。

答案 3 :(得分:0)

((?:-?\w+){3,})

匹配最少3组,可选以连字符开始,从而忽略尾随连字符。

请注意,\w字符字符也会选择下划线字符_以及0-9a-z

link to demo