我想用數學符號[(), - ,+,/,*,^]分割文本。 例如。 「(3 * 21)+4/2」應使數組{「(」,「3」,「*」,「21」,「)」,「+」,「4」,「/」,「2」 }C#如何分割文本,但不刪除分隔符?
我正在嘗試通過regex.split來做到這一點,但括號有問題。
我想用數學符號[(), - ,+,/,*,^]分割文本。 例如。 「(3 * 21)+4/2」應使數組{「(」,「3」,「*」,「21」,「)」,「+」,「4」,「/」,「2」 }C#如何分割文本,但不刪除分隔符?
我正在嘗試通過regex.split來做到這一點,但括號有問題。
不知道是什麼問題你遇到過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"
您可以運行源字符串,如果當前值是數字,則添加到數組單元格;如果不是([,*, - 等等)),則移動到下一個數組單元格。
我真的覺得這樣的事情會很方便..
首先,使用函數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];
}
就是這樣......
但是,然後「21」將被存儲爲「2」和「1」 - 我不認爲這是通緝 –
你應該包括你試過的東西... –
爲什麼採用如此複雜的方式;似乎你所有的字符串都是一個字符,爲什麼不一次讀一個字符並存儲在單獨的字符串數組中!但是,我覺得這是一個XY問題! –
只是說'如果你正在尋找表情操縱和東西,也許你可以使用NCalc –