我需要在给定文本中的每个X(即4,5,6等)句子之后插入一个单词。我觉得正则表达式是紧凑和良好的解决方案。具体来说,我需要在.net中执行此操作。
谢谢,
米希尔
(如果正则表达式无法识别一些以不常见的标点符号结尾的句子,我就可以了。我不需要100%准确度)
答案 0 :(得分:1)
扩展正则表达式支持单词boundary operator \b。它可以用来匹配句子的结尾。试试这个正则表达式:
((?:\.[^.]+){2})\b(\.)([ \n])
这是2和3的示例:
$ echo "A. B. C. D. E. F."|perl -wne 's/((?:\.[^.]+){1})\b(\.)([ \n])/$1$2word$3/g && print'
A. B.word C. D.word E. F.word
$ echo "A. B. C. D. E. F."|perl -wne 's/((?:\.[^.]+){2})\b(\.)([ \n])/$1$2word$3/g && print'
A. B. C.word D. E. F.word
答案 1 :(得分:1)
如果找到匹配项并且只要找到新的匹配项就循环遍历字符串,则只能使用.NET中的Regex。当然,这不是正则表达式的实现:
string word = "WORD"; // Your word
string sentence = "1. 2. 3. 4. 5. 6. 7. 8. 9. 10."; // Your sentence
long count = 0;
int xSentence = 3; // Numbers of sentence
int pos = 0;
// Your Regex
Regex reg = new Regex(@"[\.,\!,\?]", RegexOptions.IgnoreCase);
Match mat = reg.Match(sentence);
// While there is a new match
while (mat.Success)
{
count++;
if (count % xSentence == 0)
{
// +1 to insert the word after punctuation
pos = mat.Index + 1;
sentence = sentence.Insert(pos, word);
mat = reg.Match(sentence, pos);
}
else
{
mat = mat.NextMatch();
}
}
也许这个woul会帮助你在.NET中实现它,尽管还有其他几种方法可以实现它。
答案 2 :(得分:0)
如果我是你,我会做一个string.Split(“。”)这会给你一个数组,数组中的每个元素都包含一个句子。现在,您可以将单词添加到您需要的句子的末尾。现在,您可以使用String.Join将字符串连接在一起。注意:别忘了添加“。”加入时加入