正则表达式用西班牙语

时间:2017-05-28 15:28:04

标签: c# regex

我尝试了许多非常不成熟的模式,但我无法获得真实的东西。 以下尝试 INCOMPLETE ,我没有寻求改进,只是这种情况的真正解决方案。

我试图在C#(.NET 2017)上检测(如果匹配则返回true)以下模式/规则:

  • 不敏感的比赛
  • 如果字符串上的一个单词向模式返回true,则所有字符串都返回true
  • 元音是:'a,e,i,o,u and y'
  • 没有任何元音的单词,返回true
    • 除非该单词包含一个或多个数字,或者适用于以下情况。
  • 超过3个非元音的字词返回true
    • 在这种情况下,数字被视为非元音。
    • 此规则的例外情况是,找到的模式为:bstrdscrdstrnscrnstrrscrnsflnsfrnsgr
  • 除了aceil,{{1}之外,字词不得包含超过2个相同的连续字母},ors
    • 单词不得超过3个相同的连续字母,无一例外。

我的C#代码是样本代码:

u

到目前为止我的正则表达式(工作不正常):

 Regex regex = new Regex(ConfigurationManager.AppSettings["Regex_LogicalWord"]);
            Match match = regex.Match(input);
            return match.Success

任何建议或任何帮助都将被预先确定。

主要思想是降低正则表达式的性能,所以我假设一个模式是我的目标,而不是为不同的模式循环每个单词。

更新:查找和排除的示例:

\b(?:[^aeiyou\W]){1,}\b

\b(?=\w{2,}\b)(?:[^aeiou\W]*[aeiuo]){1,}[^aeiou\W]*\b

([bdfghjkmnñpqtvwxyz])\1{1}|([aceilorsu])\2{2}|[bcdfghjklmnpqrstvwxyz]{5}

1 个答案:

答案 0 :(得分:1)

这并不是说它真的很难,但描述并非如此 措辞足以消除歧义。

这是我的尝试。

(?i)(?<!\S)(?=(?:\d|([a-z])(?!\1\1\1))+(?!\S))(?=(?:([^\Waceilorsu\d_])(?!\2\2)|[aceilorsu\d])+(?!\S))(?:[^\Waeiouy_]+|(?=[a-z\d]*?(?:bstr|dscr|dstr|nscr|nstr|rscr|nsfl|nsfr))[a-z\d]*?[^\Waeiouy_](?:[a-z\d]*?[^\Waeiouy_]){2}[a-z\d]*?)(?!\S)

评论

 (?i)
 (?<! \S )                     # Whitespace boundary

 (?=                           # 3 successive max, no exceptions
      (?:
           \d 
        |  
           ( [a-z] )                     # (1)
           (?! \1 \1 \1 )
      )+
      (?! \S )
 )

 (?=                           # 2 successive max, except one of [aceilorsu]
      (?:
           ( [^\Waceilorsu\d_] )         # (2)
           (?! \2 \2 )
        |  
           [aceilorsu\d] 
      )+
      (?! \S )
 )

 (?:
      [^\Waeiouy_]+                 # No vowels 
   |                              # or,
                                    # 3 Not vowels
      (?=                           # must be one of these to qualify
           [a-z\d]*? 
           (?:
                bstr
             |  dscr
             |  dstr
             |  nscr
             |  nstr
             |  rscr
             |  nsfl
             |  nsfr 
           )
      )
      [a-z\d]*?                    
      [^\Waeiouy_] 
      (?: [a-z\d]*? [^\Waeiouy_] ){2}
      [a-z\d]*? 
 )
 (?! \S )                      # Whitespace boundary