2010-09-05 4 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

3

В общем, вы не можете правильно разобрать текст на английском языке с регулярными выражениями.

Лучшее, что вы можете сделать, это найти некоторые знаки препинания, которые обычно заканчивают предложение, но, к сожалению, это не гарантия. Например, текст Mr. Bloggs находится здесь. Вы хотите поговорить с ним? содержит два периода, которые имеют разные значения. Нет никакого способа для регулярного выражения различать два использования периода.

Я бы предложил вместо этого взглянуть на библиотеку разбора естественного языка. Например, 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

да, я собирался сделать это перед каждой полной остановкой, но вы правы, up mr. который я не хочу – Sam

+1

Исходный плакат не уточнил английский. Некоторые языки не помещают пробелы между словами, поэтому я задаюсь вопросом, может ли программа правильно выбрать последнее слово. –

+0

Да, правда, я никогда не думал об этом, я полагаю, – Sam

Смежные вопросы