给定一个字符串,如何在字符串包含至少一个但不超过2个字母的情况下编写匹配的正则表达式" n"在任何位置?到目前为止,我只想出了n {1,2}
答案 0 :(得分:3)
我使用:
^[^n]*n[^n]*n?[^n]*$
其中[^n]*
代表0或更多NON n
它至少匹配一个n
,最多匹配n
根据评论,您可以使用:
^(?:[^n]*n[^n]*){1,2}$
您可以将{1,2}
更改为{3,5}
或任何您想要的内容。
答案 1 :(得分:1)
^(?!(?:.*n){3}).*n.*$
您可以为同一个添加lookahead
。参见演示。
https://regex101.com/r/cZ0sD2/10
或
^(?!(?:[^\nn]*n){3}).*n.*$
答案 2 :(得分:0)
为什么要使用正则表达式?这是一种在高度可持续和灵活的扩展方法中实现的方法。
public static bool ContainsMoreThanAndLessThan(this string s, char c, int maxOcurrences, int minOcurrences)
{
Debug.Assert(maxOcurrences >= minOcurrences);
Debug.Assert(minOcurrences > 0);
Debug.Assert(s != null);
if (s.Length < minOcurrences)
{
return false;
}
var ocurrences = 0;
foreach (var ch in s)
{
if (ch == c)
{
ocurrences++;
}
if (ocurrences > maxOcurrences)
{
return false;
}
}
return ocurrences >= minOcurrences;
}
答案 3 :(得分:0)