正则表达式来剪切文本

时间:2017-09-12 07:44:39

标签: java regex

我想剪切这段文字

UNIT=1111,SPACE=(TRK,0),DISP=(MOD,DELETE,DELETE),DSN=UUU.AAAAA.BBBBB

结果:

UNIT=1111
SPACE=(TRK,0)
DISP=(MOD,DELETE,DELETE)
DSN=UUU.AAAAA.BBBBB

我尝试了自己,但我是正常表达的诺布,我使用(\S+)=(\S+)来剪切它,但它不正确。

有人可以帮助我吗?

这是我的java代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(\\S+)=(\\S+)";
final String string = "UNIT=1111,SPACE=(TRK,0),DISP=(MOD,DELETE,DELETE),DSN=UUU.AAAAA.BBBBB"

final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

2 个答案:

答案 0 :(得分:1)

您可以使用此负前瞻性正则表达式进行拆分:

String[] arr = str.split(",(?![^()]*\\))");

这假设()都是平衡的且没有转义。

RegEx Demo

RegEx分手:

  • ,:匹配文字逗号
  • (?![^()]*\\)):断言前言断言逗号不在(...)

答案 1 :(得分:0)

工作代码在这里https://regex101.com/r/G355nS/2

^(UNIT=\d{4}),(SPACE=\S+\d+\)),(DISP=\S+\)),(DSN=[\S+.]*)$