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+)
。