一个字符串包含至少一个但不超过2个字母" n"在C#正则表达式?

时间:2016-01-26 17:30:00

标签: c# asp.net regex

给定一个字符串,如何在字符串包含至少一个但不超过2个字母的情况下编写匹配的正则表达式" n"在任何位置?到目前为止,我只想出了n {1,2}

http://regexstorm.net/tester

4 个答案:

答案 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.*$

https://regex101.com/r/cZ0sD2/11

答案 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)

另一个改编自this answer的Regex示例将为您提供一到两次出现的角色匹配。

"^([^n]*n){1,2}[^n]*$"

有没有理由用InBetween建议的简单方法解决这个问题?