我尝试了许多非常不成熟的模式,但我无法获得真实的东西。 以下尝试 INCOMPLETE ,我没有寻求改进,只是这种情况的真正解决方案。
我试图在C#(.NET 2017)上检测(如果匹配则返回true)以下模式/规则:
true
,则所有字符串都返回true
'a,e,i,o,u and y'
true
true
bstr
,dscr
,dstr
,nscr
,nstr
,rscr
, nsfl
,nsfr
,nsgr
a
,c
,e
,i
,l
,{{1}之外,字词不得包含超过2个相同的连续字母},o
,r
,s
我的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}
答案 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