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

C# How to split text, but without removing delimiter?

我想用数学符号 [(),-,+,/,*,^] 拆分文本。 例如。 "(3*21)+4/2" 应该使数组 {"(","3","*","21",")","+","4","/","2" }

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

您可以 运行 通过源字符串,如果当前值为数字则添加到数组单元格,或者如果不是数字则移动到下一个数组单元格([、*、- 等...)。

我真的觉得这样的东西会派上用场..
首先,使用 getline 并获取所有输入,或者如果您已经有一个字符串,请存储它。

 string input = Console.ReadLine();


然后创建一个长度为string.length...

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


然后把数组的每一个值存到string的值中!!
像这样

str[0]=arr[0];

这应该可以正常工作,对所有
个字符执行此操作,或者可以使用 for 循环..

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

就是这样...

不确定您在使用 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"