给出一串:
"S1 =F A1 =T A2 =T F3 =F"
如何拆分它以便结果是一个字符串数组,其中4个字符串,单个字符串将如下所示:
"S1=F"
"A1=T"
"A2=T"
"F3=F"
谢谢
答案 0 :(得分:1)
您可以尝试将所有Name = (T|F)
条件与正则表达式匹配,然后在 Linq 的帮助下删除每个匹配中的空格:
using System.Linq;
using System.Text.RegularExpressions;
..
string source = "S1 \t = F A1 = T A2 = T F3 = F";
string[] result = Regex
.Matches(source, @"[A-Za-z][A-Za-z0-9]*\s*=\s*[TF]")
.OfType<Match>()
.Select(match => string.Concat(match.Value.Where(c => !char.IsWhiteSpace(c))))
.ToArray();
Console.WriteLine(string.Join(Environment.NewLine, result));
结果:
S1=F
A1=T
A2=T
F3=F
编辑:发生了什么事。第一部分是正则表达式匹配:
... Regex
.Matches(source, @"[A-Za-z][A-Za-z0-9]*\s*=\s*[TF]")
.OfType<Match>() ...
我们正试图找出带有模式的片段
[A-Za-z] - Letter A..Z or a..z
[A-Za-z0-9]* - followed by zero or many letters or digits
\s* - zero or more white spaces (spaces, tabulations etc.)
= - =
\s* - zero or more white spaces (spaces, tabulations etc.)
[TF] - either T or F
第二部分是匹配清算:对于找到的每个match
, S1 \t = F
我们希望获得"S1=F"
字符串:
...
.Select(match => string.Concat(match.Value.Where(c => !char.IsWhiteSpace(c))))
.ToArray();
我们在这里使用 Linq :对于匹配中的每个字符,我们会过滤掉所有空白区域(当且仅当它不是空格时才使用字符c
):
match.Value.Where(c => !char.IsWhiteSpace(c))
然后将每个Concat
的已过滤字符(IEnumerable<char>
)组合回match
并将这些字符串组织为一个数组( materialization ):
string