【发布时间】:2021-12-01 13:06:12
【问题描述】:
我有这个字符串:TF'E'
我想将其拆分为字符,但 '" 字符应加入它之前的字符。
所以它看起来像这样:T、F' 和 E'
【问题讨论】:
-
只需在
'上拆分,然后在 char 上拆分每个拆分,然后如果需要,将'添加回每个组的最后一个
我有这个字符串:TF'E'
我想将其拆分为字符,但 '" 字符应加入它之前的字符。
所以它看起来像这样:T、F' 和 E'
【问题讨论】:
' 上拆分,然后在 char 上拆分每个拆分,然后如果需要,将 ' 添加回每个组的最后一个
您可以使用正则表达式在新字母和可选'之前的每个位置拆分字符串:
var input = "TF'E'";
var output = Regex.Split(input, @"(?<!^)(?=\p{L}'?)");
output 现在将是一个字符串数组,如["T", "F'", "E'"]。后视 (?<!^) 确保我们永远不会在字符串的开头拆分,而前瞻 (?=\p{L}'?) 描述一个字母 \p{L} 后跟 0 或 1 '。
【讨论】:
您可以使用正则表达式来捕获“一个大写字符,后跟一个可选的撇号”
var mc = Regex.Matches(input, "(?<x>[A-Z]'?)");
foreach(Match m in mc)
Console.WriteLine(m.Groups["x"].Value);
【讨论】:
如果你不喜欢正则表达式,你可以使用这个方法:
public static IEnumerable<string> Split(string input)
{
for(int i = 0; i < input.Length; i++)
{
if(i != (input.Length - 1) && input[i+1] == '\'')
{
yield return input[i].ToString() + input[i+1].ToString();
i++;
}
else
{
yield return input[i].ToString();
}
}
}
我们遍历输入字符串。我们检查是否有下一个字符以及是否是'。如果为真,则返回当前字符和下一个字符,并将索引加一。如果为 false,则返回当前字符。
【讨论】: