使用正则表达式解析文本

本文关键字:文本 正则表达式 | 更新日期: 2023-09-27 18:30:37

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

这是我的标准:

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

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

---Lorem ipsum dolor sit amet, consectetur adipiscing elit.Mauris euismod : tristiquetellus non egestas;佩伦特式发酵菌 lectus orci !一句格言 nunc placerat sed ?Quisque eget felis in lacus ''rcursus posuere''r''r Aliquam venenatis''rNisi 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() 方法的良好组合。如有必要,请随时向我询问更多详细信息。

使用正则表达式解析文本

由于您仍然不清楚'r应该是回车还是字面'r,我将同时放置:

字面:

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

IDE演示。

回车:

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

IDE演示。

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

char u = ':';//只是初始化

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

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