是否可以将字符串拆分为字符串数组,并使用string删除分隔符之外的部分.拆分或正则表达式
本文关键字:字符串 拆分 分隔符 删除 正则表达式 string 数组 是否 | 更新日期: 2023-09-27 18:12:47
我想使用方法(例如MethodToSplitIntoArray(string toSplit))将不同部分之间具有已知分隔符的字符串分割成字符串数组,如下面的示例所示。这些值是字符串值,可以包含除'{','}'或','之外的任何字符,因此我无法在任何其他字符上进行分隔。字符串也可以在开始和结束处包含不需要的空白,因为文件可以从多个不同的来源生成,所需的信息也将在"{" "}"之间并用逗号分隔。
String valueCombined = " {value},{value1},{value2} ";
String[] values = MethodToSplitIntoArray(valueCombined);
foreach(String value in values)
{
//Do something with array
Label.Text += "'r'nString: " + value;
}
标签显示位置:
字符串:价值字符串:value1
String: value2
我当前的拆分方法实现如下。它分割值,但包括第一个括号前的任何空格以及它们之间的任何内容。
private String[] MethodToSplitIntoArray(String toSplit)
{
return filesPassed.Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries);
}
我认为这会分离出花括号之间的字符串并删除字符串的其余部分,但我的输出是:
字符串:
字符串:价值
字符串:
字符串:value1
字符串:
字符串:value2
字符串:
我做错了什么在我的分裂,我仍然得到括号外的字符串值?理想情况下,我想使用正则表达式或字符串。如果可能的话分割
对于那些有类似问题的人,请查看DotNet perl关于分割
假设花括号内不允许有逗号,并且在花括号外只会出现逗号或空格,在我看来,最直接,最易于阅读的方法是首先分割逗号,然后修剪结果(删除空格),然后最后删除第一个和最后一个字符(在这一点上应该只有花括号):
valuesCombined.Split(',').Select(s => s.Trim().Substring(1, s.Length - 2)).ToArray();
我相信在初始分割操作中包含花括号只会使一切变得更加困难,并且更有可能以难以识别的方式中断(例如,与使用上面的操作相比,不良数据将导致更奇怪的结果)。
添加,
到分界表:
return filesPassed.Split(new char[] { '{', '}', ',' }, StringSplitOptions.RemoveEmptyEntries);
不确定您是否期望在前面和末尾使用这些空格,因此添加了一些修剪以防止这些空白结果。
private String[] MethodToSplitIntoArray(String toSplit)
{
return toSplit.Trim().Split(new char[] { '{', '}', ',' }, StringSplitOptions.RemoveEmptyEntries);
}
这可能是获得所有值的方法之一,因为你正在寻找
String valueCombined = " {value},{value1},{value2} ";
String[] values = valueCombined.Split(new string[] { "},{" }, StringSplitOptions.RemoveEmptyEntries);
int lastVal = values.Count() - 1;
values[0] = values[0].Replace("{", "");
values[lastVal] = values[lastVal].Replace("}", "");
我在这里所做的是将字符串与"},{"
分开,然后从第一个数组项中删除{
,从最后一个数组项中删除}
。
试试regex和linq。
return Regex.Split(toSplit, "[.{.}.,]").Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();
虽然很晚了,但你可以试试这个吗:
Regex.Split(" { value},{ value1},{ value2};", @"'s*},{'s*|{'s*|},?;?").Where(s => string.IsNullOrWhiteSpace(s) == false).ToArray()