我有一个if
语句,我试图将其压缩为正则表达式语句。 if
语句如下:
string degree = "21S"
if (degree != "" &&
Convert.ToInt32(degree) > 9 &&
TChr == "N" ||
degree != "" &&
Convert.ToInt32(degree) > 41 && TChr == "S")
字符串将始终是一个数字,可以是S
或N
(北/南)。如果是N
,则该数字必须介于1-9
之间,如果是S
,则范围为1-41
。
我一直在尝试使用条件的范围:
^(?(/dN)[1-9]N|[1-51]S)$
然而,它没有抓到任何东西,所以我认为我会采取错误的方式。
答案 0 :(得分:2)
您可以使用以下正则表达式:
\b(?:[1-9]N|(?:[1-9]|[1-3][0-9]|4[01])S)\b
var pattern = @"\b(?:[1-9]N|(?:[1-9]|[1-3][0-9]|4[01])S)\b";
这是demo。
答案 1 :(得分:2)
正则表达式不是这项工作的最佳工具,因为使用正则表达式检查整数范围很困难。
除非你真的必须使用正则表达式,否则我只需要清理一下你所拥有的东西。它比可以执行相同操作的正则表达式更易读。
string input = "21S";
char direction = input.Last();
int degree = int.Parse(input.Trim('N', 'S'));
bool valid = ((direction == 'N' && degree >= 1 && degree <= 9) ||
(direction == 'S' && degree >= 1 && degree <= 41);
答案 2 :(得分:1)
我认为你是在尝试这个:
^(?(?=\dN)[1-9]N|(?:4[01]|[1-3][0-9]|[1-9])S)$
...但你真的不需要这个任务的条件。这很好用:
^(?:[1-9]N|(?:4[01]|[1-3][0-9]|[1-9])S)$
此外,您无法将数字与正则表达式匹配(即,通过其数值)。字母,数字,标点符号等等,它们都只是字符。