我在联合中制作了一个图形计算器,我用"3+10“这样的字符串输入,我想把它拆分成"3”、"+“和"10”。
我可以想出一种方法来处理它们,一旦我把它们用这种形式处理了,但是,我真的需要一种方法将字符串拆分到键字符的左和右,例如加号、时间、指数等。
我是用统一语言来做这件事的,但是用任何语言都可以做到这一点。
发布于 2015-08-02 16:58:22
C
下面的代码将执行您所要求的操作(仅此而已)。
string input = "3+10-5";
string pattern = @"([-+^*\/])";
string[] substrings = Regex.Split(input, pattern);
// results in substrings = {"3", "+", "10", "-", "5"}通过使用Regex.Split而不是String.Split,您也可以检索数学运算符。这是通过将数学运算符放入捕获组( )来完成的。如果您不熟悉正则表达式,就应该搜索基本内容。
上面的代码将顽固地使用数学运算符来拆分字符串。如果字符串没有意义,则方法不关心,甚至可能产生意想不到的结果。例如,"5//10-"将导致{"5", "/", "", "10", "-", ""}。注意,只返回一个/,并添加空字符串。
在尝试拆分字符串之前,可以使用更复杂的正则表达式来检查字符串是否是有效的数学表达式。例如,^(\d+(?:.\d+)?+([-+*^\/]\g<1>)?)$将检查您的字符串是否由一个十进制数、一个操作符的零或多个组合以及另一个十进制数组成。
发布于 2015-08-01 20:48:49
这里是C#的方式--我提到这是因为您使用的是统一。
words = phrase.Split(default(string[]),StringSplitOptions.RemoveEmptyEntries);https://msdn.microsoft.com/en-us/library/tabh47cf%28v=vs.110%29.aspx
发布于 2015-08-01 20:49:55
R:编辑
将您的输入向量作为x<-c("3+10", "4/12" , "8-3" ,"12*1","1+2-3*4/8")。
我们可以使用以下基于regex的字符串拆分
> strsplit(x,split="(?<=\\d)(?=[+*-/])|(?<=[+*-/])(?=\\d)",perl=T)
[[1]]
[1] "3" "+" "10"
[[2]]
[1] "4" "/" "12"
[[3]]
[1] "8" "-" "3"
[[4]]
[1] "12" "*" "1"
[[5]]
[1] "1" "+" "2" "-" "3" "*" "4" "/" "8"它的工作原理:
当发现两种情况之一时,拆分字符串:
(?<=\\d)找到紧跟在数字前面的东西,而(?=[+*-/])则立即找到算术运算符(即+、*、-或/ )成功的东西。这两种情况下的“东西”都是在一个数字和一个操作符之间找到的空白字符串"",并且在这种情况下字符串被分割。https://stackoverflow.com/questions/31766086
复制相似问题