【问题标题】:Split string - By multiple character like {1} {2} {3}拆分字符串 - 通过多个字符,如 {1} {2} {3}
【发布时间】:2018-07-07 06:13:34
【问题描述】:

我在 c# 中拆分字符串时遇到问题。

例如字符串:"Hello {1} World {2} example {3} today"

输出应该是这样的;

Hello World example today

我已经尝试使用下面的代码,它对我来说工作正常,但是我想要任何其他方式来实现这一点,而不是声明 3 Delimiter。

String value = "Hello {1} World {2} example {3} today"; 
string strDelimitor = "{1}"; 
string strDelimitor1 = "{2}"; 
string strDelimitor2 = "{3}"; 
string[] lines = value.Split(new[] { strDelimitor }, StringSplitOptions.None); 
string first = lines[0].ToString();
string[] second = lines[1].Split(new[] { strDelimitor1 }, StringSplitOptions.None); 
string secondmsg = second[0].ToString(); 
string[] third = second[1].Split(new[] { strDelimitor2 }, StringSplitOptions.None); 
string Thirdmsg = third[0].ToString(); 
string fourthmsg = third[1].ToString(); 

请帮我解决这个分裂的问题。

【问题讨论】:

  • 你试过什么? {1},{2}.. 是这样写的吗?看过正则表达式吗?
  • 向我展示您尝试实现的代码?
  • 我认为您的问题是错误的,因为您的问题是关于拆分字符串,而您想要的输出是删除字符。拆分和删除字符是两个不同的实体。
  • 我已经尝试使用下面的代码,它对我来说工作正常,但是我想要任何其他方式来实现这一点,而不是声明 3 Delimitor。 String value = "Hello {1} World {2} example {3} today";字符串 strDelimitor = "{1}";字符串 strDelimitor1 = "{2}";字符串 strDelimitor2 = "{3}"; string[] lines = value.Split(new[] { strDelimitor }, StringSplitOptions.None); string first = lines[0].ToString();
  • string[] second = lines[1].Split(new[] { strDelimitor1 }, StringSplitOptions.None);字符串 secondmsg = second[0].ToString(); string[] 第三 = second[1].Split(new[] { strDelimitor2 }, StringSplitOptions.None);字符串 Thirdmsg = 第三[0].ToString(); string Fourthmsg = third[1].ToString();

标签: c# asp.net .net string split


【解决方案1】:

只需使用Regex:

首先将此添加到您的 using 指令中:

using System.Text.RegularExpressions;

然后:

string str = "Hello {1} World {2} example {3} today";
string pattern = @"\{\d+\}";
string replacement = "";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(str, replacement);

"\{\d+\}" 表示:一个左大括号后跟一个或多个数字 (d+),后跟一个右大括号。

【讨论】:

    【解决方案2】:

    好的,我也想玩!您的输入字符串在括号中的数字之前和之后都有一个空格。我在数字后面加了一个空格。那么在执行 Join 时,单词之间应该留一个空格。

     string s = "Hello {1} World {2} example {3} today";
     string[] splitters = { "{1} ", "{2} ", "{3} " };
     string[] newS = s.Split(splitters, StringSplitOptions.None);
     string Final = String.Join("",newS);
     Debug.Print(Final);
    

    要使用 Debug.Print,请添加 using 语句 System.Diagnostics

    【讨论】:

    • @SandeepVerma 如果字符串在大括号内包含更多数字,如下所示:"Hello {1} World {2} example {3} today {4} and 5"?尝试使用更常见的方法。
    • @S.Akbari 我同意更通用的解决方案更好,但如果像我这样的 OP 不熟悉正则表达式并且对该方法的解释会有所帮助。
    【解决方案3】:

    如果您想删除分隔符字符串,请这样做:

    string[] seperator = new string[] { "{1}", "{2}", "{3}" };
    string   myString  = "Hello {1} World {2} example {3} today";
    
    foreach( string s in seperator )
    {
        myString = myString.Replace( s, "" );
    }
    

    【讨论】:

      【解决方案4】:

      像这样使用 String.Split 方法:

      string[] separators   = new string[] { "{1}", "{2}", "{3}" };
      string   myString     = "Hello {1} World {2} example {3} today";
      string[] splitStrings = myString.Split( separators,  StringSplitOptions.RemoveEmptyEntries );            
      

      【讨论】:

      • 如果字符串包含更多包含数字的花括号,像这样:"Hello {1} World {2} example {3} today {4} and 5"
      • 如果花括号中的位数未知,最好使用下面提到的正则表达式方法。
      【解决方案5】:

      您可以使用正则表达式(您需要使用命名空间System.Text.RegularExpressions

      using System.Text.RegularExpressions;
      //(...)
      Regex rgx = new Regex(@"\s?\{.\}\s?");
      string result = rgx.Replace("Hello {1} World {2} example {3} today", " ");
      // Hello World example today
      

      【讨论】:

        【解决方案6】:

        您可以像这样拆分String。这段代码很简单

        string s = "there is a cat";
        string[] words = s.Split(' ');
        foreach (string word in words)
        {
            Console.WriteLine(word);
        }
        

        输出是:

        那里

        一个

        但是你想分割多个字符然后试试这个。我们使用Regex.Split 根据多个字符进行分隔。如果你需要StringSplitOptions,有一个重载的方法。这将删除空字符串

        string value = "cat\r\ndog\r\nanimal\r\nperson";
        string[] lines = Regex.Split(value, "\r\n");
        
        foreach (string line in lines)
        {
            Console.WriteLine(line);
        }
        

        输出:

        动物

        【讨论】:

          【解决方案7】:

          如果您想删除所有数字、大括号、空格并只保留纯文本以便删除 {14} 等可以使用它,但它很难看

          String test = "Hello {1} World {2} example {3} today";
          char[] delimArray = { ' ','{','0','1','2','3','4','5','6','7','8','9', '}' };
          String [] test2 = test.Split(delimArray, StringSplitOptions.RemoveEmptyEntries);
          foreach( String s in test2)
          {
          System.Console.WriteLine(s);
          }
          

          【讨论】:

            猜你喜欢
            • 2013-10-30
            • 1970-01-01
            • 2013-03-03
            • 2014-02-26
            • 1970-01-01
            • 1970-01-01
            • 2017-03-21
            • 2016-04-28
            • 1970-01-01
            相关资源
            最近更新 更多