【问题标题】:Split string and string arrays拆分字符串和字符串数组
【发布时间】:2015-12-24 01:44:43
【问题描述】:
string s= abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz;

我希望输出为字符串数组,在“xy”处拆分。我用过

  string[] lines = Regex.Split(s, "xy"); 

这里它删除了xy。我想要数组和xy。因此,在我将字符串拆分为字符串数组后,数组应如下所示。

lines[0]= abc;
lines[1]= xyefg;
lines[2]= xyijk123;
lines[3]= xylmxno;
lines[4]= xyopq ;
lines[5]= xyrstz;

我该怎么做?

【问题讨论】:

  • 你需要什么语言的?
  • 请将您使用的语言添加到标签中。是 C# 吗?
  • 我使用的语言是 C#
  • 如果您上面的代码是有效的 C#,那就太好了。否则,我们需要花费时间来修复代码,然后才能提供有效的答案。

标签: c# arrays regex string split


【解决方案1】:
(?=xy)

你需要在0 width assertion上拆分。查看演示。

https://regex101.com/r/fM9lY3/50

string strRegex = @"(?=xy)";
Regex myRegex = new Regex(strRegex, RegexOptions.None);
string strTargetString = @"abcxyefgxyijk123xylmxnoxyopqxyrstz";

return myRegex.Split(strTargetString);

输出:

abc xyefg xyijk123 xylmxno xyopq xyrstz

【讨论】:

    【解决方案2】:

    这样做似乎很简单:

    string s = "abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz";
    
    string[] lines = Regex.Split(s, "xy");
    
    lines = lines.Take(1).Concat(lines.Skip(1).Select(l => "xy" + l)).ToArray();
    

    我得到以下结果:

    我不知道你是否想保留** - 你的问题没有说清楚。将 RegEx 更改为 @"\*\*xy\*\*" 将删除 **

    【讨论】:

      【解决方案3】:

      如果您没有与 Regex 结婚,您可以制作自己的扩展方法:

      public static IEnumerable<string> Ssplit(this string InputString, string Delimiter)
      {
          int idx = InputString.IndexOf(Delimiter);
          while (idx != -1)
          {
              yield return InputString.Substring(0, idx);
              InputString = InputString.Substring(idx);
      
              idx = InputString.IndexOf(Delimiter, Delimiter.Length);
          }
      
          yield return InputString;
      }
      

      用法:

      string s = "abc**xy**efg**xy**ijk123**xy**lmxno**xy**opq**xy**rstz";
      var x = s.Ssplit("xy");
      

      【讨论】:

      • 我非常喜欢您的做法,但我认为如果您使用 yield return 而不是 List&lt;string&gt; output,这将是一个很棒的答案。
      • @Enigmativity -- 感谢您的洞察力和建议。我没有在 C# 中“受过经典训练”,并且可能会因暴力破解解决方案而感到内疚。我已经阅读了yield return 并根据您的反馈修改了我的建议——我已将其添加到我的工具箱中。再次感谢。
      【解决方案4】:

      如何简单地循环遍历从索引 1 开始的数组并将“xy”字符串添加到每个条目?

      或者实现你自己的 split 版本,按照你想要的方式切割字符串。

      另一个解决方案是以非贪婪的方式匹配“xy*”,您的数组将是所有匹配项的列表。根据语言,这可能不会被称为拆分 BTW。

      【讨论】:

      • 请不要在没有实际解决方案的情况下提供建议。就目前而言,您的回答更像是一个大评论。
      • 有时,正确方向的提示比解决方案本身更有价值。顺便说一句,到目前为止给出的所有其他三个答案都显示了我的三个建议的实现;-)
      • 如果这是一个问答网站,我会同意,但这是一个问答网站。你应该坚持完整的答案。 Stack Overflow 的首要目的不仅仅是为发布问题的人提供答案,而是一遍又一遍地为将来浏览此问题的人提供答案。只有提出好的问题和好的答案才能达到这个目的。
      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 2018-06-09
      相关资源
      最近更新 更多