试试这个正则表达式:
"((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))"
这是一个正在运行的示例:http :
//ideone.com/c02rmM
{ ... String someString = "CC23QQ21HD32"; String regex = "((?<=[a-zA-Z])(?=[0-9]))|((?<=[0-9])(?=[a-zA-Z]))"; System.out.println(Arrays.asList(someString.split(regex))); //outputs [CC, 23, QQ, 21, HD, 32] ...}正则表达式使用 前瞻性
(?=ValueToMatch)和 回头看
(?<=ValueToMatch)。
它的前半部分(在|之前)问:“上一个字符是字母
(?<=[a-zA-Z])吗?下一个字符是数字
(?=[0-9])吗?”
如果两者都为真,则将字符串与正则表达式匹配。
该正则表达式的后半部分正相反。它会问:“前一个字符是数字
(?<=[0-9])吗?下一个字符是字母吗?
(?=[a-zA-Z])”,如果两个都是正确的,它将再次匹配。
通常,split()会删除正则表达式匹配的字符。即使对于此正则表达式也是如此。但是,由于正则表达式与0宽前瞻匹配,因此不会删除您要查找的实际字符。



