是否可以将字符串拆分为字符串数组,并使用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关于分割

是否可以将字符串拆分为字符串数组,并使用string删除分隔符之外的部分.拆分或正则表达式

假设花括号内不允许有逗号,并且在花括号外只会出现逗号或空格,在我看来,最直接,最易于阅读的方法是首先分割逗号,然后修剪结果(删除空格),然后最后删除第一个和最后一个字符(在这一点上应该只有花括号):

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()