我需要编写一个正则表达式来验证文件输入是否遵循规则:
A111B2_3_C.exe
其中:
应该接受这个:A111B2_3_.exe。但不接受A111B2_3_0.exe。 3_之后的数字必须大于0.
提前致谢。
答案 0 :(得分:4)
理解你的要求有点难,但这里有一个应该做你想做的正则表达式:
A\d+B[1-6]_\d+(_\d+)?\.exe
说明:
A
- 字母'A'\d+
- 1个或更多数字B
- 字母'B'[1-6]
- 单个数字:1,2,3,4,5或6 _
- 下划线\d+
- 1个或更多数字(_\d+)?
- 可选地,下划线后跟一个或多个数字\.
- 一段时间exe
- 字母'exe' 修改:在回复您的评论时,以下是一个也接受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