正则表达式 - 在每个X句子后添加一个单词

时间:2011-05-05 07:57:24

标签: .net regex vb.net

我需要在给定文本中的每个X(即4,5,6等)句子之后插入一个单词。我觉得正则表达式是紧凑和良好的解决方案。具体来说,我需要在.net中执行此操作。

谢谢,

米希尔

(如果正则表达式无法识别一些以不常见的标点符号结尾的句子,我就可以了。我不需要100%准确度)

3 个答案:

答案 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将字符串连接在一起。注意:别忘了添加“。”加入时加入