用-作为一个单词在正则表达式中拆分字符串

时间:2018-12-03 20:24:19

标签: java regex string punctuation

我正在尝试在每组正则表达式中拆分一个包含32个字符的句子。如果第32个字符是单词中的字母,则该句子将在完整单词后分割。当我输入的句子中带有“-”时,它也会拆分该词。

这是我正在使用的正则表达式

(\b.{1,32}\b\W?)

输入字符串:

  

半包入式螺旋int配深色Packed Smithfield Half   带釉包装的骨制螺旋火腿

结果组:

  
      
  1. 具有以下功能的半骨骼螺旋int
  2.   
  3. 深色包装的Smithfield半骨-
  4.   
  5. 带釉包的螺旋火腿
  6.   

在上述拆分中,“ Bone-in”是一个单词,但regex会考虑单独的单词对它进行拆分。如何修改我的正则表达式以将“-”视为一个单词?简而言之,我想在“骨干”之后拆分。

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以使用

dhm

详细信息

  • (\b.{1,32}(?![\w-])\W?) -单词边界
  • \b-尽可能多地包含1到32个除换行符以外的字符
  • .{1,32}-当前位置左侧的字符不能为单词(字母,数字或(?![\w-]))或_ char
  • --可选的非单词字符。

在Java中,使用以下方法:

\W?

Java example

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()]);
}