我一直在查看Google搜索结果的页面和页面,但没有找到任何可以帮助我的内容。
我要做的是拆分像Bananas22Apples496Pears3
这样的字符串,并将其分解为某种可读格式。由于String.split()
无法做到这一点,我想知道是否有人可以指出我可以完成此任务的正则表达式片段。
扩展一下:为简单起见,上面的字符串将被拆分为(String[]
):
{"Bananas:22", "Apples:496", "Pears:3"}
答案 0 :(得分:4)
试试这个
String s = "Bananas22Apples496Pears3";
String[] res = s.replaceAll("(?<=\\p{L})(?=\\d)", ":").split("(?<=\\d)(?=\\p{L})");
for (String t : res) {
System.out.println(t);
}
第一步是用“:”替换空字符串,左边是带lookbehind assertion (?<=\\p{L})
的字母,右边是数字,{{ 3}} (?=\\d)
。
然后拆分结果,左边是数字,右边是字母。
\\p{L}
是lookahead assertion,匹配每种语言的每个字母。
答案 1 :(得分:3)
你需要Replace
然后split
字符串。你不能单独拆分
1&gt; Replace All
包含以下正则表达式的字符串
(\\w+?)(\\d+)
并将其替换为
$1:$2
2&gt; 现在Split
使用此正则表达式
(?<=\\d)(?=[a-zA-Z])
答案 2 :(得分:1)
这应该做你想要的:
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
答案 3 :(得分:0)
将\d+
替换为:$0
,然后将其拆分为(?=[a-zA-Z]+:\d+)
。
答案 4 :(得分:0)
String myText = "Bananas22Apples496Pears3";
System.out.println(myText.replaceAll("([A-Za-z]+)([0-9]+)", "$1:$2,"));