簡體   English   中英

RegEx查找字符串是否在數字字符串范圍內

[英]RegEx to find if a string lies in a range of number strings

在這里,我有一個奇怪的問題,我試圖將在powerbuilder中發現的行為復制到C#。

這是powerbuilder中的select case語句

CHOOSE CASE ls_char
   CASE "_" 
      ls_char = "-"
   CASE "0" to "9"
      MESSAGEBOX("DIGIT")
END CHOOSE

現在出現問題了:ls_char可以是字符串或char,但是powerbuilder仍然會發現它的等效數值是否介於“ 0”和“ 9”之間。 我們甚至通過將“ 0”賦予​​“ 900”並給出ls_char =“ 300”來進行嘗試,它會彈出消息框。

任何有關使用正則表達式來實現此解決方案或任何其他解決方案的指導都將不勝感激。

在PowerScript CHOOSE語句中不比較“ ...等效數值...” ,它只是按原樣比較對象(在這種情況下為字符串,無需任何進一步處理)。 “ 9”大於“ 0”,因為“ 999”大於“ 000”(您可以嘗試“ 11”小於“ 2”)。

CASE expressionlist參數的PowerScript參考手冊文檔中,您可以看到TO子句僅接受值,通常是從testexpression類型轉換為expressionlist類型,而不是相反。 這意味着,如果您提供字符串,那么它將比較字符串而不是數字!

C#中沒有CHOOSE的等效項,並且switch語句不能那樣使用(例如,您可以在VB.NET中的Select語句中找到它)。 解決方法是使用if

string text = ls_char.ToString();
if (text == "_")
    ls_char = "-";
else if (text >= "0" && text <= "9")
    MessageBox.Show("Digit");

要比較數字,您需要在CASE塊中提供數字:

CHOOSE CASE long(ls_char)
   CASE 0 TO 5
      MESSAGEBOX("SMALLER")
   CASE 6 TO 9
      MESSAGEBOX("SMALL")
END CHOOSE

在這種情況下,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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM