在句子中查找最后一个单词的正则表达式

10

如何使用正则表达式查找句子中的最后一个单词?


这段文本是用什么语言编写的?英语? - Mark Byers
2个回答

12

如果你需要找到一个字符串的最后一个单词,可以这样做:

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];

?> 

有没有一种方法可以使用正则表达式将其压缩成一个?因为我正在使用一个函数,但是我无法让正则表达式起作用,它只能捕获句点和空格,而不是其他内容。 - Sam

3
一般情况下,您无法使用正则表达式正确解析英文文本。
最好的方法是查找通常终止句子的标点符号,但不幸的是这并不能保证完全正确。例如,文本“Mr. Bloggs is here. Do you want to talk to him?”包含两个具有不同含义的句号。正则表达式无法区分句号的两种用法。
我建议您查看自然语言解析库。例如,斯坦福解析器可以轻松将上述文本正确解析为两个句子:
Mr./NNP Bloggs/NNP is/VBZ here/RB ./. Do/VBP you/PRP want/VB to/TO talk/VB to/TO him/PRP ?/.

还有很多其他免费可用的NLP库,你也可以使用它们,我并不特别支持某个产品 - 这只是一个示例,以证明可以相当可靠地将文本解析成句子。请注意,即使是自然语言解析库也会偶尔出错 - 正确解析人类语言很难。


是的,我本来打算在每个句号前都加上“d”,但你说得对,这样会抓到“mr.”,而我不想要它。 - Sam
1
原帖没有指定英语。 一些语言在单词之间不加空格,所以我想知道程序能否正确地挑选出最后一个单词。 - Windows programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接