我需要使用一个分词器来分割空格上的单词,但如果空格位于双括号内,则不会分割。这是一个例子:
My input-> term1 term2 term3 ((term4 term5)) term6
应该产生这个 token 列表:
term1, term2, term3, ((term4 term5)), term6.
我认为我可以通过扩展Lucene来获得这种行为WhiteSpaceTokenizer 。我如何执行此扩展?
还有其他解决方案吗?
提前致谢。
最佳答案
我没有尝试扩展 Tokenizer,但我这里有一个很好的(我认为)带有正则表达式的解决方案:
\w+|\(\([\w\s]*\)\)
以及一种从返回数组的 reg ex 中按匹配组分割字符串的方法。代码示例:
class Regex_ComandLine {
public static void main(String[] args) {
String input = "term1 term2 term3 ((term4 term5)) term6"; //your input
String[] parsedInput = splitByMatchedGroups(input, "\\w+|\\(\\([\\w\\s]*\\)\\)");
for (String arg : parsedInput) {
System.out.println(arg);
}
}
static String[] splitByMatchedGroups(String string,
String patternString) {
List<String> matchList = new ArrayList<>();
Matcher regexMatcher = Pattern.compile(patternString).matcher(string);
while (regexMatcher.find()) {
matchList.add(regexMatcher.group());
}
return matchList.toArray(new String[0]);
}
}
输出:
term1
term2
term3
((term4 term5))
term6
希望这对您有帮助。
请注意以下代码与通常的split()
:
String[] parsedInput = input.split("\\w+|\\(\\([\\w\\s]*\\)\\)");
不会返回任何内容或不会返回您想要的内容,因为它只检查分隔符。
关于java - 如何扩展WhitespaceTokenizer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7546444/