【问题标题】:is there a conditional split in C#? [closed]C# 中有条件拆分吗? [关闭]
【发布时间】:2013-05-01 13:00:40
【问题描述】:

我遇到了一个问题,

我想拆分“。”之后的所有内容

例如,如果我有句子:

“丹尼去上学了。太棒了。”

我希望我的输出是

丹尼去上学了。

太棒了。

我可以很容易地解决它:

string[] list = currentResult.Split(new string[] { ". " }, StringSplitOptions.None);

但是!

如果我有例如:

  1. 丹尼去上学了。和 : 2. 詹姆斯也去上学了。

我的输出将是:

1.

丹尼去上学了。和:

2.

詹姆斯也去上学了

.

例如,当点之前有一个数字时,我不希望它拆分它。 我能以某种方式解决它吗?

谢谢!

【问题讨论】:

  • 您希望输出是什么?在数字情况下,我不太明白你想要什么。
  • 假设句子“数量为 2”。突然出现?
  • 在您的第二个示例中,为什么School. and 上没有拆分?
  • 我认为您无法正确解决此问题。有时. 实际数据,有时它用于指示在哪里拆分数据。我认为必须以某种方式准备数据,以便您可以通过编程方式区分这两种情况。
  • @thormayer - 阅读我的链接 - 从头开始​​执行此操作不会捕获所有案例。查找由对该主题进行研究的人建立的图书馆。

标签: c#


【解决方案1】:

这里的问题是如何处理格式奇怪的数据,如果您可以控制您的数据,您可能会考虑使用 1) 和 2) 而不是 1. 和 2.;但是,如果不是这种情况,那么您可能不得不求助于正则表达式来辨别 . 是行的一部分还是行的结尾,因为此功能超出了 String.Split 的功能

【讨论】:

    【解决方案2】:

    你总是可以一个接一个地做,比如:

    注意:未经测试,但看起来不错:)

    List<string> strings = new List<string>();
    int curStart = 0;
    for(int index=0;index<str.Length;index++) {
        if(index > 0) {
            if(str[index] == '.') {
                if(!char.IsNumeric(str[index-1])) {
                    strings.Add(str.SubString(curStart, index-curStart));
                    curStart = index + 1;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      我想我会尝试生成与您所要求的内容相匹配的答案,因为 cmets 在您想要的更大范围内有意义。

      了解如何在 C# 代码中使用正则表达式:http://www.dotnetperls.com/regex-matches

      我使用http://regexpal.com/ 来确认我的正则表达式。玩弄那个或类似的页面来掌握正则表达式。值得了解如何进行正则表达式。

      查看http://www.mikesdotnetting.com/Article/46/CSharp-Regular-Expressions-Cheat-Sheet 或其他地方以获取正则表达式的命令和定义列表。

      正则表达式 ".*?\D[.||:]\s" 将转换字符串:

      1. Danny went to School. and : 2. James went to school as well. Danny went to school. it was wonderful. 
      

      进入以下匹配项(此处用新行分隔):

      1. Danny went to School. 
      and : 
      2. James went to school as well. 
      Danny went to school. 
      it was wonderful. 
      

      请注意,我也冒昧地根据 ':' 分隔匹配项,因为您的示例也是这样做的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-19
        • 1970-01-01
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 2016-05-21
        相关资源
        最近更新 更多