正则表达式匹配可能包含连字符的西里尔字母中的三个单词

时间:2016-06-01 14:46:17

标签: c# .net regex

我正在尝试提出一个正则表达式,该正则表达式匹配西里尔字母中的3个单词,其中也可以包含C#中的连字符。

匹配: “АБАБА”, “А-БА-БА-Б”,“А-Б-ААБАБ”等。

不匹配: “АБАБ”,“А-БАБ”,“АБАБ-”等。

到目前为止,我只有西里尔字母的正则表达式: ^ [\ u0400- \ u04FF] + $

1 个答案:

答案 0 :(得分:1)

首先,让我们详细说明规则

  
      
  • Word必须以字母开头,以字母结尾
  •   
  • Word可以包含任意数量的   连字符;每个连字符必须用字母包围(开始悬空或   不允许加倍连字符)
  •   

所以对于单词我们有

  [\u0400-\u04FF](-?[\u0400-\u04FF]+)*

一些例子:

  АБ      // correct
  АБ-А-АБ // correct (with hyphens)
  Z       // incorrect: non cyrillic letter
  -А      // incorrect: starting hyphen
  А-      // incorrect: dangling hyphen
  А--Б    // incorrect: double hyphen

现在,对于单词:我们希望正好用任意数的空格\s分隔的三个单词:

  ^[\u0400-\u04FF](-?[\u0400-\u04FF]+)*(\s+[\u0400-\u04FF](-?[\u0400-\u04FF]+)*){2}$