我正在使用正则表达式帮助我无法正常工作,我使用了一些在线工具来测试模式,但收效甚微。
我需要根据模式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
答案 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
<强>解释强>
(?<!^)
否定的外观断言前面的内容不是该行的开头。(?=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)