2017-03-26 50 views
0

我想用數學符號[(), - ,+,/,*,^]分割文本。 例如。 「(3 * 21)+4/2」應使數組{「(」,「3」,「*」,「21」,「)」,「+」,「4」,「/」,「2」 }C#如何分割文本,但不刪除分隔符?

我正在嘗試通過regex.split來做到這一點,但括號有問題。

+0

你應該包括你試過的東西... –

+2

爲什麼採用如此複雜的方式;似乎你所有的字符串都是一個字符,爲什麼不一次讀一個字符並存儲在單獨的字符串數組中!但是,我覺得這是一個XY問題! –

+0

只是說'如果你正在尋找表情操縱和東西,也許你可以使用NCalc –

回答

1

不知道是什麼問題你遇到過Regex.Split,但看起來很簡單。你所要做的就是逃避在正則表達式中有特殊含義的角色。像這樣:

string input = "(3*21+[3-5])+4/2"; 
string pattern = @"(\()|(\))|(\d+)|(\*)|(\+)|(-)|(/)|(\[)|(\])"; 

var result = Regex.Matches(input, pattern); 
var result2 = Regex.Split(input, pattern); 

編輯:更新模式,' - '和'/'不必轉義。

然後你有2個選擇:第一個是使用Split,它會使字符串數組,但在每個匹配之間將是空字符串。這就是爲什麼我認爲你應該去追求Matches並且將它轉換爲字符串數組之後很簡單。

string[] stringResult = (from Match match in result select match.Value).ToArray(); 

stringResult 
{string[15]} 
    [0]: "(" 
    [1]: "3" 
    [2]: "*" 
    [3]: "21" 
    [4]: "+" 
    [5]: "[" 
    [6]: "3" 
    [7]: "-" 
    [8]: "5" 
    [9]: "]" 
    [10]: ")" 
    [11]: "+" 
    [12]: "4" 
    [13]: "/" 
    [14]: "2" 
3

您可以運行源字符串,如果當前值是數字,則添加到數組單元格;如果不是([,*, - 等等)),則移動到下一個數組單元格。

-1

我真的覺得這樣的事情會很方便..
首先,使用函數getline,並採取一切輸入或者如果u已經有一個字符串,其存儲。

string input = Console.ReadLine(); 


然後創建長度string.length減的陣列...

string[] arr = new string[input.Length]; 
//Make sure ur input doesnt have spaces 


然後,數組的每個值存儲到字符串的值!!
像這樣

str[0]=arr[0]; 

這應該正常工作的所有
字符做到這一點還是可以使用一個for循環..

for(int i=0;i<input.Length;i++){ 
str[i]=arr[i]; 
} 

就是這樣......

+0

但是,然後「21」將被存儲爲「2」和「1」 - 我不認爲這是通緝 –

相關問題