Java 用于在方括号中保留 ngram 的正则表达式

Java regex to preserve ngrams in square brackets

我是 Java 正则表达式的新手,所以我想知道是否有人可以在我需要正则表达式以根据 ngram 拆分文本的地方提供帮助。所以如果我有这样的文字:

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

到 return 以下 ngram:

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

方括号中的内容是保留为双字母还是三字母?

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

这很简单:

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

Demo

解释:

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

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

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

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