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是否有意使用[+,-]
,但显然-你是对的-他确实在检查+
,,
,和-
)。