使用正则表达式解析文本
本文关键字:文本 正则表达式 | 更新日期: 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*)|('...)