Java RegEx Split匹配并包含尾随字符

时间:2014-08-06 09:43:02

标签: java regex split

我正在使用正则表达式帮助我无法正常工作,我使用了一些在线工具来测试模式,但收效甚微。

我需要根据模式FS [0-9] [0-9]拆分一个字符串,但也包括一些尾随文本,可以是逗号分隔的文本和数字。

例如:FS01,a,b,c,d,1,2,3FS02,x,y,zFS03,some random text,123FS04,1

需要分成:

  • FS01,a,b,c,d,1,2,3
  • FS02,x,y,z
  • FS03,some random text,123
  • FS04,1

3 个答案:

答案 0 :(得分:3)

使用负向lookbehind和正向前瞻来获得分裂。

String s = "FS01,a,b,c,d,1,2,3FS02,x,y,zFS03,some random text,123FS04,1";
String tok[] = s.split("(?<!^)(?=FS\\d{2})");
System.out.println(tok[0]);
System.out.println(tok[1]);
System.out.println(tok[2]);
System.out.println(tok[3]);

<强>输出:

FS01,a,b,c,d,1,2,3
FS02,x,y,z
FS03,some random text,123
FS04,1

DEMO

<强>解释

  • (?<!^)否定的外观断言前面的内容不是该行的开头。
  • (?=FS\\d{2}) Lookahead断言以下是FS后跟两位数。因此,它将匹配标记设置在所有FS\d\d之前,而不是开始时的匹配标记。

答案 1 :(得分:2)

试试这个REGEX:

public static void main(String[] args) {
    String s = "FS01,a,b,c,d,1,2,3FS02,x,y,zFS03,some random text,123FS04,1";
    Pattern p = Pattern.compile("(FS.*?)(?=(FS|$))");
    // positive Lookahead. Captures groups starting with FS and ending upto another FS or end of String (denoted by $)
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1));
    }
}

O / P:

FS01,a,b,c,d,1,2,3
FS02,x,y,z
FS03,some random text,123
FS04,1

答案 2 :(得分:0)

在这里试试这个正则表达式FS.*?(?=FS)

http://www.regexr.com/3999u