拆分标签的优雅方式

Elegant way for splitting tags

我有一个带有这样标签的字符串

Car [[Best Praxis]] News Weather

我想将它拆分成一个字符串列表,条目如下:

Car
Best Praxis
News
Weather

我的第一个方法是搜索 [[]] 并由此吐出它。 (就像使用 Sax 解析器一样)但是代码可能会很难看。

我认为它必须以某种方式通过 Streams 轻松完成,但我没有找到如何使用 Streams 完成它的解决方案,因为我在 brakets 中有这些区域。

知道如何轻松完成这项任务吗? 因为我正在传递一个标签列表,也许一个库已经在解决这个问题或者它可以通过流来解决?

你可以使用下面的正则表达式 (?<=\[\[)([\w\s]+)(?=]])|(\w+) 就是 firstWay|secondWay|OR

  1. (?<=\[\[)([\w\s]+)(?=]]) 意思是

    • ([\w\s]+) : 字符或空格,所以可以是单词列表
    • (?<=\[\[) 确保以 2 个方括号为前缀
    • (?=]]) 确保以 2 个右方括号为前缀
  2. (\w+)只是一个字

给予

List<String> values = Pattern.compile("(?<=\[\[)([\w\s]+)(?=]])|(\w+)")
                             .matcher("Car [[Best Praxis]] News Weather")
                             .results()
                             .map(MatchResult::group)
                             .collect(Collectors.toList());

System.out.println(values); // [Car, Best Praxis, News, Weather]

Regex Demo