用于拆分句子的正则表达式无法正常工作 C#



我正在尝试写一个正则表达式,在c#中拆分句子。

我的正则表达式不能正常工作,它拆分它们很好,但字符串的最后一个字符总是被删除。任何建议吗?

例如,如果我想将文本分割成句子:

Lorem ipsum dolor sit met。我是一个忧郁的人,但我是一个理性的人!

我的正则表达式将它们分成:

Nam autem doloribus但perspatis omnis est ratiide

应该是:

Nam autem doloribus但perspatis omnis est ratiequdem

示例代码

我的正则表达式是字符串变量:pattern

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static System.Net.Mime.MediaTypeNames;
namespace L4_17
{
internal class Program
{
static void Main(string[] args)
{
const string firstBookData = "first.txt";
string firstFileData = File.ReadAllText(firstBookData);
string pattern = "[^\.\!\?] *[\.\!\?]";
List<string> allSentencesInFirstDataFile = Regex.Split(firstFileData, pattern).ToList();
foreach(string sentence in allSentencesInFirstDataFile)
{
Console.WriteLine(sentence);
}

}
}
}

我建议使用不同的模式:

[.!?]+s*(?=p{Lu}|$)

解释:

[.!?]+       - at least one symbol of ., !, ? (let's support ??, ..., ?! etc.)
s*          - zero or more white spaces
(?=p{Lu}|$) - either end of the string or Capital letter of the next sentence 
代码:

var text = "Lorem ipsum dolor sit amet. Nam etc. autem??? Doloribus ut perspiciatis?! Omnis est ratione quidem!";
var lines = Regex.Split(text, @"[.!?]+s*(?=p{Lu}|$)");
Console.WriteLine(string.Join(Environment.NewLine, lines));

输出:

Lorem ipsum dolor sit amet
Nam etc. autem               # <- note etc. is not the end of the sentence
Doloribus ut perspiciatis
Omnis est ratione quidem

相关内容

  • 没有找到相关文章

最新更新