使用正则表达式解析文本

时间:2013-09-09 14:22:16

标签: c# regex parsing

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

以下是我的标准:

  • 当有以下内容时,文本需要被分割: ! ? \ r
  • 如果有点“我们也可以拆分它。”其次是白色空间
  • 如果分隔符后面有空格,则需要添加它们。
  • 如果有网址,我们不会拆分“:”
  • 如果悬挂点“......”,则需要在
  • 后面添加

以下是更好理解的示例文字:

--- Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Mauris euismod:tristiquetellus non egestas; Pellentesque fermentum lectus orci!一个小说nunc placerat sed?在lacus \ rcursus posuere \ r \ r \ n Aliquam venenatis \ r \ n的Quisque eget felis nisi vitae dictum pharetra。 --- Vivamus semper dolor quam,pellent.esque hendrerit sapien blandit ut。 \ r \ n \ 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()方法的良好结合。如有必要,请随时向我询问更多详情。

3 个答案:

答案 0 :(得分:1)

由于你还不是很清楚\r应该是回车还是文字\r,我会把两者放在一起:

文字:

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

ideone demo

回车:

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

ideone demo

答案 1 :(得分:0)

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

char u =':'; //刚刚初始化

        switch (u) 
        {
            case ':':
                //do split work here
                break;
            default:
                //do split work here
                break;
        }

答案 2 :(得分:0)

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