我想用数学符号[(), - ,+,/,*,^]分割文本。 例如。 "(3 * 21)+ 4/2"应该制作数组{"("," 3"," *"," 21",")&#34 ;," +"" 4"" /"" 2"}
我试图通过regex.split来做到这一点,但括号是有问题的。
答案 0 :(得分:3)
您可以运行源字符串,如果当前值是数字,则添加到数组单元格,如果不是,则可以移动到下一个数组单元格([,*, - ,etc ...)。
答案 1 :(得分: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);
编辑:更新模式,' - '和'/'不必转义。
之后你有两个选择:第一个是使用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"
答案 2 :(得分:-1)
我真的认为这样的事情会派上用场。
首先,使用getline并获取所有输入,或者如果你已经有一个字符串,则存储它。
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];
}
那是......