C#如何拆分文本,但不删除分隔符?

时间:2017-03-26 17:22:28

标签: c# symbols

我想用数学符号[(), - ,+,/,*,^]分割文本。 例如。 "(3 * 21)+ 4/2"应该制作数组{"("," 3"," *"," 21",")&#34 ;," +"" 4"" /"" 2"}

我试图通过regex.split来做到这一点,但括号是有问题的。

3 个答案:

答案 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];
 }

那是......