2015-05-20 93 views
3

問:這是我的一個虛數的正則表達式:正則表達式:複數

[0-9]{0,}\d\.[0-9]{0,}\d[i]|[0-9]{0,}\d[i] 

只需要一個純粹的複雜零件的虛數。

當我的解析器遇到,例如String im = "2i";,它被轉換爲String z = "complex(0, 2)" //complex(re, im) - 這樣的:

Matcher m = pattern.regex.matcher(exp);  //String exp = "2i + 5" 

if(m.find()) 
{ 
    String key = m.group();     //String key = "2i" 
    int type = pattern.token; 

    if(type == COMPLEX) 
    { 
    key = key.replaceAll("i", "");   // key = "2" 
    exp = m.replaceFirst("");    // exp = "5" 
    exp = "complex(0," + key +")" + exp; //exp = "complex(0,2) + 5" 
    } 

    return exp; 
} 

我可以採用某種正則表達式做一次?例如,任何十進制數字後跟字母「i」將轉換爲另一個字符串 - complex(0, number)

+0

允許j以及讓工程師保持高興。 – Bathsheba

+0

我現在有更大的問題:P –

回答

2

這裏是你可能想嘗試,與String#replaceAll什麼一個例子:

// testing integers, comma-separated and floats 
String test = "1 * 2i + 3.3i/4.4^5,555i * 6,666 + 7,777.7i/8,888.8"; 
System.out.println(
    test 
    .replaceAll(
     //| group 1: whole expression 
     //| | any 1+ digit 
     //| | | optional comma + digits 
     //| | |  | optional dot + digits 
     //| | |  |   | final "i" 
     "(\\d+(,\\d+)?(\\.\\d+)?)i", 
     "complex(0, $1)" 
    ) 
); 

輸出

1 * complex(0, 2) + complex(0, 3.3)/4.4^complex(0, 5,555) * 6,666 + complex(0, 7,777.7)/8,888.8 

注意

如果逗號部分將惹你函數表達式(即complex(0, 1,2)可能是的問題),則可以:

  • 除去圖案的那部分,或
  • 包圍向後引用與替換,例如一些定界符"complex(0, \"$1\")"
+0

謝謝!我確實刪除了逗號部分 - 現在它全部在一行中完成! –

+0

@quiZ___不客氣! – Mena