我需要每一個X之後插入一個詞在給定的文本(即4,5,6等)句子後面添加一個字。我覺得正則表達式會是緊湊和好的解決方案。具體而言,我需要在.net中執行此操作。正則表達式 - 每X句子
感謝,
米希爾
(如果正則表達式不能找出一些句子不常用的標點結束,我與它的罰款。我並不需要100%的準確率)
我需要每一個X之後插入一個詞在給定的文本(即4,5,6等)句子後面添加一個字。我覺得正則表達式會是緊湊和好的解決方案。具體而言,我需要在.net中執行此操作。正則表達式 - 每X句子
感謝,
米希爾
(如果正則表達式不能找出一些句子不常用的標點結束,我與它的罰款。我並不需要100%的準確率)
如果你發現通過字符串匹配和循環只能用正則表達式做它在.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中實現它,雖然還有其他一些方式來做到這一點。
這是C#代碼,但你可以將其轉換爲VB.NET,如果你能爲你的代碼中使用它。 – 2011-05-05 09:24:48
thnx。我做了一些修改,結果就像我想的那樣,在X語句之後插入一些單詞,其中X是4到8之間的隨機數。 – Mihir 2011-05-05 15:51:53
如果我是你,我會做一個string.Split(「」)這會給你包含一個句子的數組中的每個元素的數組。現在,您可以將單詞添加到您需要的任何句子的末尾。現在您可以使用String.Join將字符串連接在一起。注意:不要忘記添加「。」背部加入
我同意,這不是正則表達式的地方。但是,對於美國或S.O.S.等縮略詞,您必須小心。我建議遍歷整個字符串,只計算大於幾個字符的時間間隔。 – 2011-05-05 08:27:53
擴展正則表達式時支持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
我不認爲正則表達式是善於識別句子:認爲所有的邊緣情況下,像首字母縮寫。事實上,識別句子是相當不重要的。只有在這裏使用正則表達式,如果你不需要100%的準確性。 – 2011-05-05 08:01:40