Java (Regex?) split string between number/letter combination

萝らか妹 提交于 2019-12-09 03:09:27

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!