Java正则表达式将ngrams保存在方括号中

时间:2015-03-06 17:09:47

标签: java regex n-gram

我是一个Java正则表达式的新手,所以我想知道是否有人可以帮助我需要正则表达式来分割基于ngrams的文本。所以,如果我有这样的文字:

dyson [salisbury matheson beaumont] clarke [carstairs morden] vaughan

返回以下ngram:

Unigram: dyson Trigram: salisbury matheson beaumont Unigram: clarke Bigram: carstairs morden Unigram: vaughan

方括号的内容是否为bigrams或trigrams?

分割将基于括号外的空格。

1 个答案:

答案 0 :(得分:1)

这很简单:

\w+|\[([\w\s]+)\]

Demo

说明:

  • \w+匹配一个字(一系列字母数字字符或下划线)
  • 或:\[([\w\s]+)\]
    • \[[
    • 相匹配
    • [\w\s]+匹配一系列单词和空格,这是捕获的
    • \]]
    • 相匹配

如果你有一个捕获它意味着你有一些括号内的东西,否则它意味着你有一个单词。然后,您可以将简单的\w+正则表达式应用于括号的内容以提取单词。

要在Java中使用它,你必须转义反斜杠,将它们按原样传递给正则表达式引擎:

String pattern = "\\w+|\\[([\\w\\s]+)\\]";