首页 > 解决方案 > 创建正则表达式以匹配带有字母后跟固定位数的字符串

问题描述

我们有一个用例,我们需要Uid使用以下约束来验证一些:

长度为 5 的 Uid 格式为 annnnn,其中aA是除、B和之外D的任何字母En0是从到9的任意数。

因此,我创建了新方法,该方法将验证相同并按预期工作。

/// <summary>
/// Validate Uid of lenght 5 in form annnnn where ‘a’ is any letter other than A, B, D and E.
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
private static bool IsValidUid( string value )
{
    bool returnValue = false;

    if (string.IsNullOrEmpty(value) == false && value.Length == 5)
    {
        char firstChar = value[0];
        bool firstCharFailed = false;

        switch (firstChar)
        {
            case 'A':
            case 'B':
            case 'D':
            case 'E':
                firstCharFailed = true;
                break;
        }

        if (firstCharFailed == false)
        {
            string remainingStr = value.Substring(1, 4);

            int numb;

            if (int.TryParse(remainingStr, out numb) == true)
            {
                returnValue = true;
            }
        }
    }

    return returnValue;
}

但它可以通过正则表达式有效地完成。由于我不擅长它,我需要帮助为我创建一个!提前致谢!!

标签: c#regex

解决方案


其中“a”是除 A、B、D 和 E 以外的任何字母。

所以在这种情况下,您需要指定允许的字母集

[a-zF-ZC]=> 表示所有字母都在范围 az 和 FZ 应该匹配,C 也应该匹配

'n' 是从 0 到 9 的任意数字。

\d匹配一个数字,或者您可以使用[0-9]

长度为 5 的形式 annnnn

\d{4}指定应该匹配的前一个字符的数量

最后一件事必须做。您需要指定,它a应该在字符串的开头,并且字符串在第 5 个字符之后结束:

^表示字符串的开头
$表示字符串的结尾。

所以结合起来看起来像这样:

string pattern = @"^[a-zF-ZC]\d{4}$

或使用数字范围:

string pattern = @"^[a-zF-ZC][0-9]{4}$

这是正则表达式模式的概述以及示例和解释

这是一个站点,您可以在其中测试和试用您的正则表达式模式。摆弄它以了解它。它有助于

编辑:

[...]表示将匹配的一组字符。范围使用in或等-符号表示。任何其他字符都可以简单地放入集合中:a-zA-F5-9

[abcdefgxyz]将只匹配那些指定的字母!

集合和范围可以组合

[CF-SX-Z]将匹配and 和and之间的C所有大写字母。我希望现在变得更清楚FSXZ


推荐阅读