在正则表达式中拆分字符串 - 作为一个词
Splitting String in regex with - as one word
我正在尝试在每组正则表达式中拆分一个包含 32 个字符的句子。如果第 32 个字符是单词中的字母,则句子在完整单词后拆分。当我的输入是一个带有“-”的句子时,它也会拆分那个词。
这是我正在使用的正则表达式
(\b.{1,32}\b\W?)
输入字符串:
Half Bone-in Spiral int with dark Packd Smithfield Half
Bone-in Spiral Ham with Glaze Pack
结果组:
- Half Bone-in Spiral int with
- dark Packd Smithfield Half Bone-
- in Spiral Ham with Glaze Pack
在上面的拆分中,"Bone-in" 是一个单词,但正则表达式将其拆分为单独的单词。如何修改我的正则表达式以将“-”视为一个词?简而言之,我想要带骨后的分裂。
谢谢。
您可以使用
(\b.{1,32}(?![\w-])\W?)
详情
\b
- 单词边界
.{1,32}
- 1 到 32 个字符(换行符除外),尽可能多
(?![\w-])
- 当前位置左侧的字符不能是单词(字母、数字或 _
)或 -
字符
\W?
- 一个可选的非单词字符。
在Java中,使用以下方法:
public static String[] splitIncludeDelimeter(String regex, String text){
List<String> list = new LinkedList<>();
Matcher matcher = Pattern.compile(regex).matcher(text);
int now, old = 0;
while(matcher.find()){
now = matcher.end();
list.add(text.substring(old, now));
old = now;
}
if(list.size() == 0)
return new String[]{text};
//adding rest of a text as last element
String finalElement = text.substring(old);
list.add(finalElement);
return list.toArray(new String[list.size()]);
}
String s = "Half Bone-in Spiral int with dark Packd Smithfield Half Bone-in Spiral Ham with Glaze Pack";
String[] res = splitIncludeDelimeter("(\b.{1,32}(?![\w-])\W?)", s);
System.out.println(Arrays.toString(res));
// => [Half Bone-in Spiral int with , dark Packd Smithfield Half , Bone-in Spiral Ham with Glaze , Pack, ]
我正在尝试在每组正则表达式中拆分一个包含 32 个字符的句子。如果第 32 个字符是单词中的字母,则句子在完整单词后拆分。当我的输入是一个带有“-”的句子时,它也会拆分那个词。
这是我正在使用的正则表达式
(\b.{1,32}\b\W?)
输入字符串:
Half Bone-in Spiral int with dark Packd Smithfield Half Bone-in Spiral Ham with Glaze Pack
结果组:
- Half Bone-in Spiral int with
- dark Packd Smithfield Half Bone-
- in Spiral Ham with Glaze Pack
在上面的拆分中,"Bone-in" 是一个单词,但正则表达式将其拆分为单独的单词。如何修改我的正则表达式以将“-”视为一个词?简而言之,我想要带骨后的分裂。
谢谢。
您可以使用
(\b.{1,32}(?![\w-])\W?)
详情
\b
- 单词边界.{1,32}
- 1 到 32 个字符(换行符除外),尽可能多(?![\w-])
- 当前位置左侧的字符不能是单词(字母、数字或_
)或-
字符\W?
- 一个可选的非单词字符。
在Java中,使用以下方法:
public static String[] splitIncludeDelimeter(String regex, String text){
List<String> list = new LinkedList<>();
Matcher matcher = Pattern.compile(regex).matcher(text);
int now, old = 0;
while(matcher.find()){
now = matcher.end();
list.add(text.substring(old, now));
old = now;
}
if(list.size() == 0)
return new String[]{text};
//adding rest of a text as last element
String finalElement = text.substring(old);
list.add(finalElement);
return list.toArray(new String[list.size()]);
}
String s = "Half Bone-in Spiral int with dark Packd Smithfield Half Bone-in Spiral Ham with Glaze Pack";
String[] res = splitIncludeDelimeter("(\b.{1,32}(?![\w-])\W?)", s);
System.out.println(Arrays.toString(res));
// => [Half Bone-in Spiral int with , dark Packd Smithfield Half , Bone-in Spiral Ham with Glaze , Pack, ]