2014-01-30 50 views
0

另一個actionscript問題。我需要從一個文本塊中提取第一個句子,但如果第一個句子不包含超過80個字符,那麼我需要提取第一個和第二個句子。Actionscript正則表達式確定句號

下面的示例代碼是嘗試查找句子,而不是與例如文本中的其他perios /句號完全混淆。

我有這樣的測試代碼:

import flash.text.TextField; 

var descr:String = 
"The temperature was 32.8 degrees Celsius. His B.Sc. degree was deemed insufficient. the Dr. owed B. the bank USD 4000.50 which he had not paid back. On 27.07.2004 a major earthquake occurred. It was 17.05 by the clock."; 

var array:Array; 

array = descr.split(/\s[a-zA-Z]{3,30}\.\s/); 

trace(descr); //put original above output for checking against 
trace(array+"\n"+array.length);//ouput 

任何建議,將不勝感激。當我起牀時會檢查回來。

感謝

回答

2

你可以嘗試使用形式{m,n}?的懶惰量詞和積極的前瞻,以確保該時期就是以句子的結尾匹配:

^.{0,79}?(?=\.(?:$| [A-Z]))\..+?(?=\.(?:$| [A-Z]))\.|^.{80,}?(?=\.(?:$| [A-Z]))\. 

正則表達式分爲兩部分:

^.{0,79}?(?=\.(?:$| [A-Z]))\..+?(?=\.(?:$| [A-Z]))\. 

如果第一句話低於80個字符,則匹配兩個第一句。

^.{80,}?(?=\.(?:$| [A-Z]))\. 

匹配第一句(當第一部分失敗時,即當第一句話超過80個字符時)。

^匹配字符串的開頭。

.{0,79}?最多可以匹配79個字符,並且會在最近的句子時間段停止。

.{80,}?至少匹配80個字符,並且會在最近的句子時間段停止。

.+?用於第二句,可以包含任意數量的字符。

(?=\.(?:$| [A-Z]))是正超前相匹配的週期要麼是在字符串(\.$)OR,經過一段時間之後是空白和一個大寫字母(\. [A-Z])的端部。

然後匹配\.

regex101 demo

注意:這是一個正則表達式匹配不分裂。

+0

太棒了!但是現在如果第一個句子少於80個字符,如果句子字符長度超過80或只有2個句子,我需要它給我1個句子。 正則表達式匹配80個字符ATM下的所有句子。這給了我: '溫度是32.8攝氏度。他的理學士學位學位被認爲不足。博士欠B銀行4000.50美元,他還沒有還清。 當我只需要'溫度爲32.8攝氏度。他的理學士學位學位被認爲是不夠的。「 – user389391

+0

@ user389391噢,我想我第一次誤解了你的問題。我更新了我的答案。 – Jerry

+0

我嘗試了你的新表達,但仍然是相同的結果。得到所有三個句子,而不僅僅是兩個。也許我還不夠清楚:-)如果第一句話不匹配,那麼我只需要它得到第一句和第二句/下一句可以是任意長度的句子。所以如果第一句話不夠長,那麼下一句話也是如此。 – user389391