0

我需要解析文本并非常精确地拆分它。我选择使用正则表达式来完成这项工作,但我遇到了在 C# 中对其进行高级操作的问题。我将不胜感激找到完美解决方案的任何帮助,即使我需要采用正则表达式以外的其他方法。

这是我的标准:

  • 当有 : ; 时需要拆分文本 !? \r
  • 如果有点“。”我们也可以拆分它。后跟一个空格
  • 如果分隔符后面有空格,则需要添加它们。
  • 如果有 URL,我们不会拆分“:”
  • 如果有悬浮点“...”,则需要在后面添加

这是一个示例文本,可以更好地理解:

---Lorem ipsum dolor sit amet,consectetur adipiscing elit。Mauris euismod : tristiquetellus non egestas; Pellentesque 发酵菌 lectus orci !格言 nunc placerat sed ?Quisque eget felis in lacus \rcursus posuere\r\r Aliquam venenatis\r nisi vitae dictum pharetra。--- Vivamus semper dolor quam, pellent.esque hendrerit sapien blandit ut。\r\r\r\rCras sem massa,tempor sit amet nunc id,condimentum facilisis augue... \rhttps://www.google.com dictum nunc placerat sed

最后得到想要的结果:

 ---Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
 Mauris euismod  : 
 tristiquetellus non egestas; 
 Pellentesque fermentum lectus orci ! 
 A dictum nunc placerat sed ? 
 Quisque eget felis in lacus \r
 cursus posuere\r\r 
 Aliquam venenatis\r
 nisi vitae dictum pharetra.     \r
 ---Vivamus semper dolor quam, pellent.esque hendrerit sapien blandit ut.  \r\r\r\r
 Cras sem massa, tempor sit amet nunc id, condimentum facilisis augue...  \r
 https://www.google.com dictum nunc placerat sed

我离结果真的很远,这就是我在这里发帖的原因。我此时尝试成功 1) 步骤。这是我的实际代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace ConsoleApplication58
{
    class Program
    {
        static void Main(string[] args)
        {            
            Regex r = new Regex(@"(\S*\w+\s*\p{P}*)+[:;!?]+\s*");

            string lorem = "---Lorem ipsum dolor sit amet, consectetur adipiscing elit. " +
                "Mauris euismod : " +
                "tristiquetellus non egestas; " +
                "Pellentesque fermentum lectus orci ! " +
                "A dictum nunc placerat sed ? " +
                "Quisque eget felis in lacus \r" +
                "cursus posuere\r\r " +
                "Aliquam venenatis\r " +
                "nisi vitae dictum pharetra. " +
                "---Vivamus semper dolor quam, pellent.esque hendrerit sapien blandit ut. \r\r\r\r" +
                "Cras sem massa, tempor sit amet nunc id, condimentum facilisis augue... \r" +
                "https://www.google.com dictum nunc placerat sed";

            MatchCollection m2 = r.Matches(lorem);

            foreach (Match match in m2)
            {
                string txt = match.Value;
                Console.WriteLine("*{0}*", txt);
            }
        }
    }
}

非常感谢您阅读本文并尝试帮助我。这有点紧急,我无法从正则表达式中找出与 Matches() 方法的良好组合。如有必要,请随时向我询问更多详细信息。

4

3 回答 3

1

由于您仍然不清楚\r应该是回车还是文字\r,所以我将两者都放在:

文字:

(.+?)((?:\.{3} |[:;!?](?!/)|\. )(?:\\r)*\s*|(?:\\r)+\s*|$)

ideone 演示

回车:

(.+?)((?:\.{3} |[:;!?](?!/)|\. )(?:\r)*\s*|(?:\r)+\s*|$)

ideone 演示

于 2013-09-09T16:26:02.120 回答
0

我看到你有正则表达式,只需使用正则表达式实例拆分字符串,如下所示: ... string[] splitStringValues = r.split(lorem); 或者

字符 u = ':'; //只是初始化

        switch (u) 
        {
            case ':':
                //do split work here
                break;
            default:
                //do split work here
                break;
        }
于 2013-09-09T14:54:46.503 回答
0

看一下这个 (((http(s*))\://){1}\S+)|((\S*\w+\s*\p{P}*)+[:;!?]+\s*)|(\...)

于 2013-09-09T15:49:56.083 回答