我是一个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?
分割将基于括号外的空格。
答案 0 :(得分:1)
这很简单:
\w+|\[([\w\s]+)\]
说明:
\w+
匹配一个字(一系列字母数字字符或下划线)\[([\w\s]+)\]
\[
与[
[\w\s]+
匹配一系列单词和空格,这是捕获的\]
与]
如果你有一个捕获它意味着你有一些括号内的东西,否则它意味着你有一个单词。然后,您可以将简单的\w+
正则表达式应用于括号的内容以提取单词。
要在Java中使用它,你必须转义反斜杠,将它们按原样传递给正则表达式引擎:
String pattern = "\\w+|\\[([\\w\\s]+)\\]";