问题
I've been looking through pages and pages of Google results but haven't come across anything that could help me.
What I'm trying to do is split a string like Bananas22Apples496Pears3
, and break it down into some kind of readable format. Since String.split()
cannot do this, I was wondering if anyone could point me to a regex snippet that could accomplish this.
Expanding a bit: the above string would be split into (String[]
for simplicity's sake):
{"Bananas:22", "Apples:496", "Pears:3"}
回答1:
Try this
String s = "Bananas22Apples496Pears3";
String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})");
for (String t : res) {
System.out.println(t);
}
The first step would be to replace the empty string with a ":", when on the left is a letter with the lookbehind assertion (?<=\\p{L})
and on the right is a digit, with the lookahead assertion (?=\\d)
.
Then split the result, when on the left is a digit and on the right is a letter.
\\p{L}
is a Unicode property that matches every letter in every language.
回答2:
You need to Replace
and then split
the string.You can't do it with the split alone
1> Replace All
the string with the following regex
(\\w+?)(\\d+)
and replace it with
$1:$2
2> Now Split
it with this regex
(?<=\\d)(?=[a-zA-Z])
回答3:
This should do what you want:
import java.util.regex.*;
String d = "Bananas22Apples496Pears3"
Pattern p = Pattern.compile("[A-Za-z]+|[0-9]+");
Matcher m = p.matcher(d);
while (m.find()) {
System.out.println(m.group());
}
// Bananas
// 22
// Apples
// 496
// Pears
// 3
回答4:
String myText = "Bananas22Apples496Pears3";
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));
回答5:
Replace \d+
by :$0
and then split at (?=[a-zA-Z]+:\d+)
.
来源:https://stackoverflow.com/questions/13374171/java-regex-split-string-between-number-letter-combination