如何返回分割某个字符串的分隔符? (C#)[重复]

Posted

技术标签:

【中文标题】如何返回分割某个字符串的分隔符? (C#)[重复]【英文标题】:How do I return which delimiter split a certain string? (C#) [duplicate] 【发布时间】:2021-06-15 04:19:31 【问题描述】:

我在数学运算符处拆分用户输入string,我想知道是否有某种方法可以准确记住哪个运算符充当了分隔符在代码中?

private void button1_Click(object sender, EventArgs e)

    string userInput = textBox1.Text;
    char[] operators =  '+', '-', '*', '/' ;
    //splits the entered string into substrings after encountering operator characters
    string[] operands = userInput.Split(operators);

【问题讨论】:

【参考方案1】:

我建议 tokenizing 而不是 splitting(在最简单的情况下,您可以使用 Regex.Split 而不是 string.Split):

  using System.Linq;
  using System.Text.RegularExpressions;

  ...

  string userInput = textBox1.Text;
  char[] operators =  '+', '-', '*', '/' ;
  
  string pattern = "(" + string.Join("|", operators
    .Select(c => Regex.Escape(c.ToString()))) + ")";

  string[] tokens = Regex.Split(userInput, pattern);

如果textBox1.Text == "5 * 6 + 7"tokens 将是"5 ", "*", "6", "+", "7"。您现在要做的就是检查每个token操作 还是操作数。像这样的:

  // "5", "6", "7"
  string[] operands = tokens
    .Where(token => !operators.Any(op => op.ToString() == token))
    .Select(item => item.Trim())
    .Where(item => !string.IsNullOrEmpty(item))
    .ToArray();

  // "*", "+"
  string[] operations = tokens
    .Where(token => operators.Any(op => op.ToString() == token))
    .ToArray(); 

【讨论】:

感谢您使用Regex.Escape 非常感谢,会试试这个。

以上是关于如何返回分割某个字符串的分隔符? (C#)[重复]的主要内容,如果未能解决你的问题,请参考以下文章

无论c#中的字符是啥,如何根据每三个字符分割一个字符串[重复]

delphi如何按固定的分隔符来分割字符串,并且把分割出来的字符串放到数组中?具体的代码如何实现?

SQLSERVER中计算某个字段中用分隔符分割的字符的个数

在shell中,用点作为分隔符分割字符串的一部分[重复]

sql 如何以逗号为分隔符分割一个字段的值

Java split()函数,要分割的字符串中没有指定的分隔符,返回啥结果