Java(Regex?)在数字/字母组合之间拆分字符串

我一直在查看Google搜索结果的页面和页面,但没有找到任何可以帮助我的内容。

我想要做的是拆分像Bananas22Apples496Pears3这样的字符串,并将其分解为某种可读格式。 由于String.split()无法做到这一点,我想知道是否有人可以指向我可以完成此任务的正则表达式片段。

扩展一下:为简单起见,上面的字符串将被拆分为( String[] ):

 {"Bananas:22", "Apples:496", "Pears:3"} 

尝试这个

 String s = "Bananas22Apples496Pears3"; String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})"); for (String t : res) { System.out.println(t); } 

第一步是用“:”替换空字符串,左边是带有lookbehind断言的字母(?<=\\p{L}) ,右边是数字,带有超前断言 (?=\\d)

然后拆分结果,左边是数字,右边是字母。

\\p{L}是一个Unicode属性 ,匹配每种语言的每个字母。

您需要Replace然后split字符串。您不能单独拆分

1> Replace All以下正则表达式Replace All字符串

 (\\w+?)(\\d+) 

并替换它

 $1:$2 

2>现在用这个正则表达式Split

 (?<=\\d)(?=[a-zA-Z]) 

这应该做你想要的:

 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 
 String myText = "Bananas22Apples496Pears3"; System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,")); 

\d+替换为:$0然后拆分为(?=[a-zA-Z]+:\d+)