【问题标题】:C# Split string until encounter certain textC#拆分字符串直到遇到某些文本
【发布时间】:2018-06-08 00:59:05
【问题描述】:

我正在尝试拆分字符串,直到找到某个字符。 示例:

string test = "Hello(30)";

我希望结果是:“你好” 另一个例子:

string test = "Test(50)";

结果:“测试”

我该怎么做呢?谢谢。

【问题讨论】:

  • 您可以选择正则表达式吗?
  • 为什么你希望结果是Hello?因为你找到了o? (?还有什么?如果你能提供一个带有 16 个样本输入的 minimal reproducible example 以及基于这些输入的预期结果,那就太棒了。
  • 您要拆分还是只获取从开始到该字符(排除)的所有内容?拆分和修剪是两个不同的东西,你使用了两个标签。
  • 看起来他们想从第二个测试用例中拆分左括号中的字符串。也许他们不需要花哨的分隔符?
  • "Hello(30)".Split('(').FirstOrDefault()

标签: c# string split trim


【解决方案1】:

你想使用IndexOf函数,它返回一个字符在字符串中的第一个位置:

string s = test.Substring(0,test.IndexOf("("));

【讨论】:

  • 虽然这个答案在某种意义上是正确的,它将返回从一个点拆分字符串所需的内容,但发布问题的人需要更清楚他们需要如何切碎字符串在我们开始做出有价值的答案之前。
  • 看起来问题大佬发布了另一个测试用例,其中左括号是拆分所需的点。我用新的界限来支持这个答案。 :)
  • 如果原始字符串中没有(怎么办?
【解决方案2】:

Nick 使用子字符串发布了一个简单的答案,但如果您想要一些可以匹配更复杂内容的字符串,只需查看Regex。如果您不熟悉,我建议您在自己的时间研究如何使用它,但这里是您的代码的实现。

您需要通过在文件顶部键入using System.Text.RegularExpressions; 来声明您想要包含正则表达式。

string test = "Hello(30)";
string match = Regex.Match(test, @"[^(]*").ToString();
//[^(]* == Exclude all after point in search.
//match == "Hello"

Regex 阅读起来可能很混乱,但如果您需要了解更多信息,这里有很多文档。只需在线搜索它,您就会找到所需的内容。

我使用的实现请参考this stack overflow comment。

【讨论】:

    【解决方案3】:
    string test = "Test(50)";
    string outcome = !test.Contains("(") ? test : test.Substring(0, test.IndexOf("("));
    

    【讨论】:

    • 请用更多的信息和解释扩展你的答案,所以它不仅仅是一个无法解释的代码块。
    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    • 2012-01-26
    相关资源
    最近更新 更多