2011-05-05 58 views
0

我需要每一個X之後插入一個詞在給定的文本(即4,5,6等)句子後面添加一個字。我覺得正則表達式會是緊湊和好的解決方案。具體而言,我需要在.net中執行此操作。正則表達式 - 每X句子

感謝,

米希爾

(如果正則表達式不能找出一些句子不常用的標點結束,我與它的罰款。我並不需要100%的準確率)

+1

我不認爲正則表達式是善於識別句子:認爲所有的邊緣情況下,像首字母縮寫。事實上,識別句子是相當不重要的。只有在這裏使用正則表達式,如果你不需要100%的準確性。 – 2011-05-05 08:01:40

回答

1

如果你發現通過字符串匹配和循環只能用正則表達式做它在.NET只要你找到新的匹配。當然,這是沒有正則表達式中的實現:

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(); 
    } 
} 

這也許竟被幫助您在.NET中實現它,雖然還有其他一些方式來做到這一點。

+0

這是C#代碼,但你可以將其轉換爲VB.NET,如果你能爲你的代碼中使用它。 – 2011-05-05 09:24:48

+0

thnx。我做了一些修改,結果就像我想的那樣,在X語句之後插入一些單詞,其中X是4到8之間的隨機數。 – Mihir 2011-05-05 15:51:53

0

如果我是你,我會做一個string.Split(「」)這會給你包含一個句子的數組中的每個元素的數組。現在,您可以將單詞添加到您需要的任何句子的末尾。現在您可以使用String.Join將字符串連接在一起。注意:不要忘記添加「。」背部加入

+0

我同意,這不是正則表達式的地方。但是,對於美國或S.O.S.等縮略詞,您必須小心。我建議遍歷整個字符串,只計算大於幾個字符的時間間隔。 – 2011-05-05 08:27:53

1

擴展正則表達式時支持word 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