我正在尝试写一个正则表达式,在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