【问题标题】:Regular expression to find last word in sentence正则表达式查找句子中的最后一个单词
【发布时间】:2012-08-21 23:45:35
【问题描述】:

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

【问题讨论】:

  • 文字是用什么语言写的?英语?

标签: javascript regex


【解决方案1】:

如果您需要查找字符串中的最后一个单词,请执行以下操作:

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

?> 

【讨论】:

  • 有没有办法让我只使用一个正则表达式,比如将它压缩成一个?因为我有一个我正在使用的函数,我只是无法让正则表达式工作它正在拾取句号和空格,没有别的
【解决方案2】:

一般情况下,您无法使用正则表达式正确解析英文文本。

您可以做的最好的事情是寻找一些通常终止句子的标点符号,但不幸的是,这并不能保证。例如文本 Mr.博客在这里。你想和他谈谈吗? 包含两个含义不同的句号。正则表达式无法区分句点的两种用法。

我建议您查看自然语言解析库。比如Stanford Parser就完全没有问题正确地将上面的文本解析成两个句子:

Mr./NNP Bloggs/NNP is/VBZ here/RB ./. 做/VBP 你/PRP 想要/VB to/TO talk/VB to/TO him/PRP ?/.

您也可以使用许多其他免费提供的 NLP 库,我并不特别认可其中一种产品 - 这只是一个示例,以证明可以将文本解析为具有相当高可靠性的句子。请注意,即使是自然语言解析库也偶尔会出错 - 正确解析人类语言是很困难的。

【讨论】:

  • 是的,我打算在每次句号之前都去,但你是对的,它会接住先生。我不想要的
  • 原发帖人未注明英文。有些语言不会在单词之间放置空格,所以我想知道一个程序是否可以正确地挑选出最后一个单词。
猜你喜欢
  • 1970-01-01
  • 2019-01-24
  • 2013-11-08
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多