2010-09-05 45 views

回答

11

如果你需要找到一個字符串的最後一個單詞,然後做到這一點:

m/ 
    (\w+)  (?# Match a word, store its value into pattern memory) 

    [.!?]?  (?# Some strings might hold a sentence. If so, this) 
       (?# component will match zero or one punctuation) 
       (?# characters) 

    \s*  (?# Match trailing whitespace using the * because there) 
       (?# might not be any) 

    $   (?# Anchor the match to the end of the string) 
/x; 

該語句後,$ 1將持有該字符串中的最後一個字。您可能需要通過添加更多的標點符號來擴展字符類[。!?]。

在PHP中:

<?php 

$str = 'MiloCold is Neat'; 
$str_Pattern = '/[^ ]*$/'; 

preg_match($str_Pattern, $str, $results); 

// Prints "Neat", but you can just assign it to a variable. 
print $results[0]; 

?> 
+0

有沒有辦法做到這一點,所以我只是使用一個正則表達式像壓縮成一個?因爲我有一個函數,我正在使用,我只是不能得到正則表達式的工作,它正在拾取句號和空格,並沒有別的 – Sam 2010-09-05 23:03:39

3

一般來說,你不能正確解析使用正則表達式英文文本。

您可以做的最好的辦法是尋找一些通常會終止句子的標點符號,但不幸的是這不是保證。例如文本博格斯先生在這裏。你想和他談談嗎?包含兩個具有不同含義的時期。用正則表達式來區分這段時期的兩種用法是沒有辦法的。

我建議您改爲看看自然語言解析庫。例如,Stanford Parser毫不費力地在所有正確地分析上述文成兩句話:

 
Mr./NNP Bloggs/NNP is/VBZ here/RB ./. 
Do/VBP you/PRP want/VB to/TO talk/VB to/TO him/PRP ?/. 

有很多,你可以用其他的也可以免費獲得NLP庫,我不認可,在一個產品特別是 - 這只是一個例子,證明可以將文本解析成具有相當高可靠性的句子。請注意,即使是自然語言解析庫也會偶爾出現錯誤 - 正確解析人類語言很困難。

+0

是的,我打算在每次完全停止之前,但你是對的,它會選擇先生。我不想要 – Sam 2010-09-05 22:55:02

+1

原始海報沒有指定英文。有些語言不會在單詞之間留出空格,所以我想知道一個程序是否可以挑出最後一個單詞。 – 2010-09-05 23:25:12

+0

是的,我從來沒有想到,我想它不會 – Sam 2010-09-05 23:44:18

相關問題