【问题标题】:Splitting a string into characters, but keeping some together [closed]将字符串拆分为字符,但将一些字符放在一起[关闭]
【发布时间】:2021-12-01 13:06:12
【问题描述】:

我有这个字符串:TF'E'

我想将其拆分为字符,但 '" 字符应加入它之前的字符。

所以它看起来像这样:TF'E'

【问题讨论】:

  • 只需在 ' 上拆分,然后在 char 上拆分每个拆分,然后如果需要,将 ' 添加回每个组的最后一个

标签: c# string split


【解决方案1】:

您可以使用正则表达式在新字母和可选'之前的每个位置拆分字符串:

var input = "TF'E'";
var output = Regex.Split(input, @"(?<!^)(?=\p{L}'?)");

output 现在将是一个字符串数组,如["T", "F'", "E'"]。后视 (?&lt;!^) 确保我们永远不会在字符串的开头拆分,而前瞻 (?=\p{L}'?) 描述一个字母 \p{L} 后跟 0 或 1 '

【讨论】:

    【解决方案2】:

    您可以使用正则表达式来捕获“一个大写字符,后跟一个可选的撇号”

    var mc = Regex.Matches(input, "(?<x>[A-Z]'?)");
    
    foreach(Match m in mc)
      Console.WriteLine(m.Groups["x"].Value);
    

    【讨论】:

      【解决方案3】:

      如果你不喜欢正则表达式,你可以使用这个方法:

      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,则返回当前字符。

      在线演示:https://dotnetfiddle.net/sPCftB

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        相关资源
        最近更新 更多