拆分标签的优雅方式
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
(?<=\[\[)([\w\s]+)(?=]])
意思是
([\w\s]+)
: 字符或空格,所以可以是单词列表
(?<=\[\[)
确保以 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
我有一个带有这样标签的字符串
Car [[Best Praxis]] News Weather
我想将它拆分成一个字符串列表,条目如下:
Car
Best Praxis
News
Weather
我的第一个方法是搜索 [[ 和 ]] 并由此吐出它。 (就像使用 Sax 解析器一样)但是代码可能会很难看。
我认为它必须以某种方式通过 Streams 轻松完成,但我没有找到如何使用 Streams 完成它的解决方案,因为我在 brakets 中有这些区域。
知道如何轻松完成这项任务吗? 因为我正在传递一个标签列表,也许一个库已经在解决这个问题或者它可以通过流来解决?
你可以使用下面的正则表达式 (?<=\[\[)([\w\s]+)(?=]])|(\w+)
就是 firstWay|secondWay
,|
是 OR
(?<=\[\[)([\w\s]+)(?=]])
意思是([\w\s]+)
: 字符或空格,所以可以是单词列表(?<=\[\[)
确保以 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]