簡體   English   中英

正則表達式使用西班牙語中的一些規則來捕獲無意義的單詞

[英]Regex to catch non-sense words with some rules in spanish

我嘗試了很多非常不成功的模式,但我無法獲得真實的東西。 以下嘗試是INCOMPLETE ,我不是在尋求改進,只是針對此場景的真正解決方案。

我正在嘗試在C#(.NET 2017)上檢測以下模式/規則(如果匹配則返回true):

  • 不敏感的匹配
  • 如果字符串中的一個單詞對模式返回true ,則所有字符串均返回true
  • 元音為: 'a,e,i,o,u and y'
  • 沒有任何元音的單詞,返回true
    • 除非單詞包含一個或多個數字,或者適用於以下情況。
  • 超過3個非元音的單詞返回true
    • 在這種情況下,數字被算作非元音。
    • 該規則的例外情況是,找到的模式為: bstrdscrdstrnscrnstrrscrnsflnsfrnsgr
  • 單詞連續不得超過2個相同的字母,除了: aceilorsu
    • 單詞連續不得超過3個相同字母。

我的C#代碼是示例之一:

 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}

任何建議或任何幫助將不勝感激。

主要思想是降低regex的性能,因此我假設一個模式是我的目標,而不是循環每個單詞以獲取不同的模式。

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

NO - con la jaja jsld la la
NO - aj124312
NO - lsj
NO - aaa
NO - ºººº
NO - yyamo
NO - hoooola
NO - ferrrocarrilll
NO - reveeer
NO - llluvia
NO - djsagaklsjgklfagkljfa
NO - glalghjrjgkJGSDGg
NO - sdfsadasdfsdfsadf
NO - sadasdgjkwergjkeqjk
NO - hola llluvia
NO - dfkjlasfjklasdfgjaklsg
NO - kajfgkajfdgjkldfgj
NO - akfjgklafd
NO - asfkjgakld
NO - skadjgflkasjgñl
NO - q
YES - y
YES - 1222133123123
YES - 11111111111123213123
YES - de
YES - y etc
YES - a3 a4
YES - hola
YES - hoola
YES - ferrocarril
YES - veer
YES - reeveer
YES - lluvia
YES - 121112111111111223

YES -    Abstraer, substraer
YES -    Abstruso
YES -    Adscribir, circunscribir, inscribir y subscribir, transcribir
YES -    Adstringir
YES -    Conscripción
YES -    Constreñir
YES -    Construir
YES -    Demonstrar (variante de demostrar)
YES -    Obstrucción
YES -   Imperscrutable e inscrutable,
YES -    Instridente
YES -    Instruir
YES -    Instrumento
YES -    Menstruación
YES -    Monstruo
YES -    Obstruir
YES -    Premonstratense
YES -    Sánscrito
YES -    Transflor
YES -    Transfregar
YES -    Transfretar
YES -    Transgredir

不是說這真的很難,但是描述不是
措詞足以消除歧義。

這是我的嘗試。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM