我想按照这些规则拆分存储在String变量中的长文本:
以这个例子为例:
"The boy ate the apple. The sun is shining high in the sky. The answer to life the universe and everything is forty two, said the big computer."
假设我要的最小长度是30。
获得的结果分割为:
我不想接受“那个男孩吃了苹果”。分割,因为少于30个字符。
我想到的2种方式:
但是我正在寻找是否可以通过使用正则表达式直接分割并测试比赛前最少字符数来完成此操作。
谢谢
答案 0 :(得分:1)
除了使用split之外,您还可以使用捕获组来匹配值。
要使点也与换行符匹配,可以使用Pattern.DOTALL
\s*(.{30}[^.]*\.|.+$)
在Java中:
String regex = "\\s*(.{30}[^.]*\\.|.+$)";
说明
\s*
匹配0_次空白字符(
捕获组
.{30}
匹配任意字符30次[^.]*
使用否定的字符类匹配0+次而不是一个点\.
字面上匹配|
或.+$
匹配任意字符1次以上,直到字符串结尾。)
关闭捕获组答案 1 :(得分:0)
这应该可以完成工作:
"\W*+(.{30,}?)\W*\."
测试:https://regex101.com/r/aavcme/3
\W*+
占用非单词字符以修剪句子之间的空格.
可以匹配任何字符(我想您想匹配句子中的任何字符){30,}
声明匹配的最小长度(30)?
的意思是“尽可能少” \.
与分隔句子的点匹配(假设您在句子的末尾总是有一个点,即使最后一个也是如此)答案 2 :(得分:0)
而不是使用 split 方法,请尝试使用以下正则表达式进行 matching :\S.{29,}?[.]