我有这个字符串
na23me=12341234las4tName=654567stree2t[696]=764545457OK
我想转换成这个数组:
['na23me=12341234', 'las4tName=654567', 'stree2t[696]=764545457', 'OK']
我认为这应该有效:
String[] tokens = buffer.split("(?!^)(?=\\b\\w=\\d+)");
答案 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