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