我想用数学符号[(), - ,+,/,*,^]分割文本。 例如。 “(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 –