【发布时间】:2012-08-21 23:45:35
【问题描述】:
如何使用正则表达式找到句子中的最后一个单词?
【问题讨论】:
-
文字是用什么语言写的?英语?
标签: javascript regex
如何使用正则表达式找到句子中的最后一个单词?
【问题讨论】:
标签: javascript regex
如果您需要查找字符串中的最后一个单词,请执行以下操作:
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];
?>
【讨论】:
一般情况下,您无法使用正则表达式正确解析英文文本。
您可以做的最好的事情是寻找一些通常终止句子的标点符号,但不幸的是,这并不能保证。例如文本 Mr.博客在这里。你想和他谈谈吗? 包含两个含义不同的句号。正则表达式无法区分句点的两种用法。
我建议您查看自然语言解析库。比如Stanford Parser就完全没有问题正确地将上面的文本解析成两个句子:
Mr./NNP Bloggs/NNP is/VBZ here/RB ./. 做/VBP 你/PRP 想要/VB to/TO talk/VB to/TO him/PRP ?/.您也可以使用许多其他免费提供的 NLP 库,我并不特别认可其中一种产品 - 这只是一个示例,以证明可以将文本解析为具有相当高可靠性的句子。请注意,即使是自然语言解析库也偶尔会出错 - 正确解析人类语言是很困难的。
【讨论】: