【问题标题】:Ignore decimal numbers when using Split() in C#在 C# 中使用 Split() 时忽略十进制数
【发布时间】:2014-04-06 05:40:01
【问题描述】:

我想知道 .Split() 方法中是否有任何方式或模式可以使用,这样当我用句点分割句子时,它不会分割十进制数(假设句子中存在十进制值)。

例如:“Windows Phone 8.1 现在具有‘Cortana’,这是一个类似 Siri 的平台功能。”

当我按句点拆分时,它将在 8.1 数字处拆分。我想跳过那个小数作为句子的一部分,这样当我按句点分割时,句子中的小数仍然存在。

【问题讨论】:

  • 将拆分参数更改为". " 而不是使用".",这样它只会在句子结束时拆分。但是,可能也需要在".\n" 上拆分。

标签: c# regex split


【解决方案1】:

我手边没有C# 编译器,但下面的正则表达式应该可以解决问题。 我在Java 中对其进行了测试,这在正则表达式处理方面比较相似。 它将拆分任何. 前面没有数字和后面的数字。

Regex reg = new Regex("(?<!\\d)\\.(?!\\d)|(?<=\\d)\\.(?!\\d)|(?<!\\d)\\.(?=\\d)");

string[] output = reg.split(input);

我不确定你是否需要在C# 中做\\.,所以你可能不得不从前面删除\\

以下代码:

using System.Text.RegularExpressions;
using System.IO;
using System;

public class Program {
    public static void Main(string[] args) {
        string input = "Windows Phone 8.1 now has 'Cortana', a Siri-like feature for the platform.";
        Regex reg = new Regex("(?<!\\d)\\.(?!\\d)|(?<=\\d)\\.(?!\\d)|(?<!\\d)\\.(?=\\d)");

        string[] output = reg.Split(input);
        Console.WriteLine(output[0]);
    }
}

输出:

Windows Phone 8.1 now has 'Cortana', a Siri-like feature for the platform

【讨论】:

  • @KarimO.,很高兴知道我还没有完全忘记我的 C# 语法。 :)
  • 我的错误,尽管该模式确实有效,但它仍然没有跳过十进制数字,而是对其进行拆分。所以我得到了这样的东西:“Windows Phone”“现在有 Cortana ...”。我想保留这个号码。
  • @KarimO.,该模式旨在在句点内分割。这意味着正则表达式在 C# 中不起作用。我刚得到一个单声道编译器,我会测试并更新它。
  • @KarimO.,查看更新。我已经用我提供的完整代码进行了测试,它跳过了这个测试用例的8.1。你能提供一个失败的测试用例吗?
  • @merlin2011 以下将中断:Hello 8.Hi.Hello.9 rabbits.。 IE。如果在句号之后有错过的空间。但是,如果总是有空格,则更容易按句点分隔,后面有空格。
【解决方案2】:

我认为你可以做到:

var output =  Regex.Split(input,@"(?!.*\w)\.");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 2017-10-21
    • 2016-02-04
    • 2017-12-13
    相关资源
    最近更新 更多