Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 拆分字符串并将分隔符保留为新的结果项_C#_String - Fatal编程技术网

C# 拆分字符串并将分隔符保留为新的结果项

C# 拆分字符串并将分隔符保留为新的结果项,c#,string,C#,String,有像11+2-33这样的字符串,我需要将其拆分为11,+,2,-,33 这就产生了11+,2-,33 Regex.Split(input,@)(?我不是正则表达式专家,所以可能有一种聪明的方法可以使用正则表达式、匹配项等进行拆分,但我要做的是添加分隔符: string s = "11+2-33"; s = s.Replace("+","|+|"); s = s.Replace("-","|-|"); string[] parts = s.Split('|'); 您可以从那里重构,但这是一般的

有像
11+2-33
这样的字符串,我需要将其拆分为
11,+,2,-,33

这就产生了11+,2-,33
Regex.Split(input,@)(?我不是正则表达式专家,所以可能有一种聪明的方法可以使用正则表达式、匹配项等进行拆分,但我要做的是添加分隔符:

string s = "11+2-33";
s = s.Replace("+","|+|");
s = s.Replace("-","|-|");

string[] parts = s.Split('|');

您可以从那里重构,但这是一般的想法。

我不是正则表达式专家,因此可能有一种聪明的方法可以使用正则表达式、匹配项等进行重构,但我要做的是添加分隔符:

string s = "11+2-33";
s = s.Replace("+","|+|");
s = s.Replace("-","|-|");

string[] parts = s.Split('|');

您可以从那里重构,但这是一般的想法。

您可以使用与数字或运算符匹配的正则表达式。例如:

string expression = "11+2-33";

string[] parts =
  Regex.Matches(expression, @"\d+|[+-]").Cast<Match>().Select(m => m.Value).ToArray();

foreach (string s in parts) Console.WriteLine(s);

可以使用与数字或运算符匹配的正则表达式。例如:

string expression = "11+2-33";

string[] parts =
  Regex.Matches(expression, @"\d+|[+-]").Cast<Match>().Select(m => m.Value).ToArray();

foreach (string s in parts) Console.WriteLine(s);

正如你所说,你需要既向后看,又向前看:

var matches = Regex.Split("11+2-33", "(?<=[+-])|(?=[+-])");
Console.WriteLine(string.Join(",", matches));

var matches=Regex.Split(“11+2-33”)(?您既需要向后看,也需要向前看,正如您所说:

var matches = Regex.Split("11+2-33", "(?<=[+-])|(?=[+-])");
Console.WriteLine(string.Join(",", matches));

var matches=Regex.Split(“11+2-33”)(?还不清楚11、+、2、+、33是一个新字符串还是一个项目数组[11]、+]、[2]、+]、[33]?您问题中的输出与您需要的
11、+、2、-、33
不同,还有“有更好的方法吗?”?“这意味着您有一个有效的解决方案,但我想情况并非如此。是的,但如果应用Regex.Split(input,@)(?还不清楚11,+,2,+,33是一个新字符串还是一个项目数组[11],+],[2],+],[33]?您的问题
11+,2-,33
中的输出与您需要的
11,+,2-,33
,还有更好的方法吗?“这意味着您有一个有效的解决方案,但我猜情况并非如此。是的,但如果应用Regex.Split(input,@)(?Cast()做什么?@kosnkov:它将从
Matches
集合返回的
MatchCollection
对象转换为
IEnumerable
。Cast()做什么do?@kosnkov:它将从
Matches
集合返回的
MatchCollection
对象转换为
IEnumerable
。这使我认为应该有
StringSplitOptions.RetainDefimeters
选项这使我认为应该有
StringSplitOptions.RetainDefimeters
选项t您的表达式与运算符
+
-
匹配。我想您的意思是
(?谢谢@Guffa,表达式使用的是OP模式,包括在look back之上的look ahead。我不确定OP是否使用了
[+,-]
是否有意,但显然-你是对的-他确实在检查
+
-
。你的表达式与运算符
+
-
匹配。我想你的意思是
(?谢谢@Guffa,这个表达式使用了OP模式,包括在look back之上的look ahead。我不确定OP是否有意使用
[+,-]
,但显然-你是对的-他确实在检查
+
,和
-
)。