我想为这个特定的模式创建一个正则表达式:
这是我到目前为止所得到的:
private string regexPattern = @"^" + // Start of string (anchor)
"(" + // begin capturing group
"(+|-)?" + // "+" or "-" - is optional
"(0*)?" + // a "0" - is optional
"[0-9]*" + // accepts any number of digits
")" + // end capturing group
":" + "(" + // start capturing
"[0 - 5]" + // character between 0 and 5
"\\d" + // one digit
")" + // end group
"$"; // end of string anchor
但我收到语法错误:
System.ArgumentException:解析" ^((+ | - )?(0)?[0-9] +):( [0 - 5] \ d)$" - 量词{x,y}无效。
我不知道我的模式是否正确创建。
非常感谢任何帮助。
答案 0 :(得分:1)
错误的直接原因是您必须逃离+
:\+
。建议的模式是
// Note \+ instead of just +
String pattern = @"^(\+|-)?[0-9]+:[0-5]?[0-9]$";
解释
(\+|-)? - either + or - or nothing
[0-9]+ - any digits, but at least 1, note that 000089 matchs [0-9]+
: - semicolumn
[0-5]?[0-9] - 0..59 with 00..09 possibility
你没有提供使用群组的代码,所以我放弃了它们;但是,如果需要,您可以轻松恢复组,例如
String pattern = @"^(?<hours>(\+|-)?[0-9]+):(?<minutes>[0-5]?[0-9])$";
答案 1 :(得分:0)
你的正则表达式中有一些东西需要改进,所以让我们从完整的模式开始:^((?:\+|-)?[0-9]+):([0-5]?\\d)$
我有:
+
- 签名并使(?:\+|-)?
成为非捕获群组 - 但您也可以使用[+-]?
,模式将为^([+-]?[0-9]+):([0-5]?\\d)$
- 只是想点失踪的逃脱(0*)?
[0-9]+
[0-9]*
更改为[0-9]+
,因为冒号前应至少有一个数字[0 - 5]
中移除了空格并将其设为可选(单个数字似乎从您的问题中有效)=&gt; [0-5]?