Tricky分裂字符串与正则表达式

时间:2014-12-12 13:10:07

标签: java regex split

我有这个字符串

na23me=12341234las4tName=654567stree2t[696]=764545457OK

我想转换成这个数组:

['na23me=12341234', 'las4tName=654567', 'stree2t[696]=764545457', 'OK']

我认为这应该有效:

String[] tokens = buffer.split("(?!^)(?=\\b\\w=\\d+)");

2 个答案:

答案 0 :(得分:4)

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

String str = "na23me=12341234las4tName=654567stree2t[696]=764545457OK";
String[] toks = str.split( "(?<==\\d{1,1000})(?=[a-zA-Z])" );
for (String tok: toks)
    System.out.printf("=> [%s]%n", tok);

<强>输出:

=> [na23me=12341234]
=> [las4tName=654567]
=> [stree2t[696]=764545457]
=> [OK]

<强>解释

Regex使用lookbehind和lookahead进行拆分:

  • (?<==\\d{1,1000})是一个积极的外观,可确保当前位置前面有=后跟1到1000位
  • (?=[a-zA-Z])是一个积极的前瞻,确保当前位置后面有一个字母

答案 1 :(得分:0)

希望这会有所帮助!!

String pattern = "([^=]*=[\\d]*)([^=]*=[\\d]*)([^=]*=[\\d]*)(.*$)";
    Pattern regex = Pattern.compile(pattern );
    String string = "na23me=12341234las4tName=654567stree2t[696]=764545457OK";
    Matcher matcher = regex.matcher(string);
    if(matcher.matches()){
        int groupCount = matcher.groupCount();
        for (int i = 0; i < groupCount; i++) {
            System.out.println(matcher.group(i+1));
        }
    }

获取输出,如下所示:

na23me=12341234
las4tName=654567
stree2t[696]=764545457
OK

PS:matcher.group(0)将始终为完整字符串。因此,请使用i+1