2017-03-26 51 views
0

我想用数学符号[(), - ,+,/,*,^]分割文本。 例如。 “(3 * 21)+4/2”应使数组{“(”,“3”,“*”,“21”,“)”,“+”,“4”,“/”,“2” }C#如何分割文本,但不删除分隔符?

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

+0

你应该包括你试过的东西... –

+2

为什么采用如此复杂的方式;似乎你所有的字符串都是一个字符,为什么不一次读一个字符并存储在单独的字符串数组中!但是,我觉得这是一个XY问题! –

+0

只是说'如果你正在寻找表情操纵和东西,也许你可以使用NCalc –

回答

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); 

编辑:更新模式,' - '和'/'不必转义。

然后你有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" 
3

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

-1

我真的觉得这样的事情会很方便..
首先,使用函数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]; 
} 

就是这样......

+0

但是,然后“21”将被存储为“2”和“1” - 我不认为这是通缉 –

相关问题