我应该使用什么正则表达式来验证此输入?

时间:2011-12-30 15:21:33

标签: c# regex

我需要编写一个正则表达式来验证文件输入是否遵循规则:

A111B2_3_C.exe

其中:

  • 答:必修课,必须是a'A'
  • 111:必修课,这是一个自然数
  • B:必修,必须是'B'
  • 2:必修课,范围为1-> 6
  • _:必须,必须是'_'
  • 3:必修,必须是自然号
  • _:如果遵循C,则为可选,它必须为'_'
  • C:可选,C是自然数
  • .exe:是文件的结束扩展名

应该接受这个:A111B2_3_.exe。但不接受A111B2_3_0.exe。 3_之后的数字必须大于0.

提前致谢。

3 个答案:

答案 0 :(得分:4)

理解你的要求有点难,但这里有一个应该做你想做的正则表达式:

A\d+B[1-6]_\d+(_\d+)?\.exe

说明:

  1. A - 字母'A'
  2. \d+ - 1个或更多数字
  3. B - 字母'B'
  4. [1-6] - 单个数字:1,2,3,4,5或6
  5. _ - 下划线
  6. \d+ - 1个或更多数字
  7. (_\d+)? - 可选地,下划线后跟一个或多个数字
  8. \. - 一段时间
  9. exe - 字母'exe'
  10. 修改:在回复您的评论时,以下是一个也接受A111B2_3_.exe的正则表达式:

    A\d+B[1-6]_\d+(_\d*)?\.exe
    

    我将最后\d+(一个或多个数字)更改为\d*(零个或多个数字)。

    修改2 :现在我已将\d*更改为([1-9]\d*)?。这意味着留给读者的练习。

    A\d+B[1-6]_\d+(_([1-9]\d*)?)?\.exe
    

答案 1 :(得分:3)

试试这个:

var regex = new Regex(@"^A(\d+)B([1-6])_(\d+)(_(\d+))?\.exe$");
var match = regex.Match(filename);
if (match.Success) {
    var firstNumber = match.Groups[1].Value; // the '111' part (number)
    var secondNumber = match.Groups[2].Value; // the '2' part (1-6)
    var thirdNumber = match.Groups[3].Value; // the '3' part (number)
    var hasFourthNumber = match.Groups[4].Success;
    string fourthNumber = null;
    if (hasFourthNumber) {
        fourthNumber = match.Groups[5].Value; // the 'C' part (number)
    }

    // TODO: Do stuff with the extracted numbers
    // TODO: Give better variable names...
}

在此处查看有效版本:http://regexr.com?2vjto

答案 2 :(得分:0)

像这样的工作:

A\d\d\dB[1-6]_\d(_\d)?\.exe

假设111是3位数,2是一位数,C是一位数。 如果111,2和C可以有更多数字:

A(\d+)B[1-6]_(\d+)(_(\d+))?\.exe