【问题标题】:Get sentence containing specific word with regex使用正则表达式获取包含特定单词的句子
【发布时间】:2016-10-06 02:09:14
【问题描述】:

我正在尝试查找包含特定单词的句子。 我定义了一个以以下字符开头和结尾的句子:. ! ?

var str = "Hello, how is it going. This is the bus we have to take!";
var regex = /[^.?!]*(?:[.?,\s!])(bus)(?=[\s.?!,])[^.?!]*[.?!]/igm;

var result = regex.exec(str);


output : `This is the bus we have to take!`

现在,当我试图找到包含单词 hello 的句子时,我遇到了麻烦,因为它是句子的开头。我怎么能改变我的正则表达式来包括那个案例?我不习惯正则表达式,而且很难进入它,即使是在我眼皮底下的文档!

【问题讨论】:

  • 如果你用 ,.! 定义断句?那么为什么不拆分那些字符串然后循环检查更简单的正则表达式呢?如果命中,则输出命中的句子。
  • 我正在考虑这个选项,但我也想知道我是否可以在一个正则表达式中做到这一点。但我可能应该照你说的做
  • 如果你想进一步实验,试试/[^.?!]*\bhello\b[^.?!]*/ig,但这不是提取句子的有效方法,你需要一个NLP包。
  • 我会听从@markg 的建议。在.?! 上拆分字符串并匹配 .*(bus).*
  • 您不需要正则表达式来检查bus,只需使用indexOf 进行检查。

标签: javascript regex


【解决方案1】:

请记住,将文本拆分为语言句子是一项非常具体、困难的任务,通常在 NLP 包的帮助下执行。

如果你想限制在你的句子定义后面的特定字符串:

  • /[.?!]/正则表达式分割
  • 检查条目是否包含带有RegExp#test() 的子字符串,因为您需要不区分大小写的检查

var str = "Hello, how is it going. This is the bus we have to take!";
var chunks = str.split(/[.?!]/).filter(function(n) {
  return /hello/i.test(n);
});
console.log(chunks);

请注意,要检查整个单词,您可以使用 /\bhello\b/i/(?:^|\s)hello(?!\S)/i 正则表达式,具体取决于进一步的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多