Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RegEx查找字符串是否位于数字字符串范围内_C#_Regex_String_Powerbuilder - Fatal编程技术网

C# RegEx查找字符串是否位于数字字符串范围内

C# RegEx查找字符串是否位于数字字符串范围内,c#,regex,string,powerbuilder,C#,Regex,String,Powerbuilder,这里我有一个奇怪的问题,我试图将powerbuilder中的一个行为复制到C# 下面是powerbuilder中的choosecase语句 CHOOSE CASE ls_char CASE "_" ls_char = "-" CASE "0" to "9" MESSAGEBOX("DIGIT") END CHOOSE 现在问题来了: ls_char可以是字符串或字符,但powerbuilder仍然可以找到它的等效数值是否介于“0”和“9”之间。 我们甚至尝

这里我有一个奇怪的问题,我试图将powerbuilder中的一个行为复制到C#

下面是powerbuilder中的choosecase语句

CHOOSE CASE ls_char
   CASE "_" 
      ls_char = "-"
   CASE "0" to "9"
      MESSAGEBOX("DIGIT")
END CHOOSE
现在问题来了: ls_char可以是字符串或字符,但powerbuilder仍然可以找到它的等效数值是否介于“0”和“9”之间。 我们甚至尝试过给“0”到“900”并给ls_char=“300”,然后弹出消息框


任何关于使用某些正则表达式来实现此解决方案或任何其他解决方案的指导都将不胜感激。

在PowerScript
CHOOSE
中,语句不比较“…等效数值…”,它只比较对象的原样(在本例中为字符串,无需进一步处理)。“9”大于“0”,因为“999”大于“000”(您可以尝试“11”小于“2”)

CASE
expressionlist
参数的文档中可以看到
TO
子句只接受值,通常从
testexpression
类型转换为
expressionlist
类型,反之亦然。这意味着,如果您提供字符串,那么它将比较字符串而不是数字

C#中没有等价的
CHOOSE
switch
语句不能这样使用(例如,您可以在VB.NET for语句中找到它)。解决方法是在以下情况下使用

string text = ls_char.ToString();
if (text == "_")
    ls_char = "-";
else if (text >= "0" && text <= "9")
    MessageBox.Show("Digit");
在本例中,ls_char(无论其类型如何)被转换为一个数字,然后进行比较,以检查它是否在请求的范围内。大致用C#表示,它相当于:

int number = Convert.ToInt32(ls_char);
if (number >= 0 && number <= 5)
    MessageBox.Show("Smaller");
else if (number >= 6 && number <= 9)
    MessageBox.Show("Small");
int number=Convert.ToInt32(ls_char);

如果(number>=0&&number=6&&number),您可以尝试regex:
[0-9-]
与regex无关(至少regex与powerbuilder CHOOSE语句无关).ls_char表示与char的关系,这是一种单字符数据类型。您确定此函数的目的是在ls_char中获取大于单字符的值吗?如果用于单字符,此脚本将更有意义。(提示:“1ABC”将抛出“DIGIT”,这没有意义。)你试过了吗?如果ls_char是一种字符类型,在numeric
choose case
中使用它会出现编译错误
C0011:表达式中的不兼容类型:long,character
@Seki谢谢,直接在这里写,忘记了转换。修复了。非常感谢Adriano,
int number = Convert.ToInt32(ls_char);
if (number >= 0 && number <= 5)
    MessageBox.Show("Smaller");
else if (number >= 6 && number <= 9)
    MessageBox.Show("Small");