输入示例:
RC23
CC23QQ21HD32
BPOASDf91A5HH123
Run Code Online (Sandbox Code Playgroud)
输出示例:
[RC,23]
[CC,23,QQ,21,HD,32]
[BPOASDf,91,A,5,HH,123]
Run Code Online (Sandbox Code Playgroud)
字母和数字部分的长度不固定。
我知道如何将split()与正则表达式一起使用,//.' ' ' '([a-z])
但是尽管我检查了split()
Java API,但找不到任何可以帮助我解决此问题的东西。
有没有办法split()
做到这一点?或者我需要使用另一种方法来拆分这些字符串。
任何帮助,将不胜感激。
试试这个正则表达式: "((?<=[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]
...
}
Run Code Online (Sandbox Code Playgroud)
正则表达式正在使用前瞻性 (?=ValueToMatch)
和后顾之忧 (?<=ValueToMatch)
。
它的前半部分(在|之前)问:“上一个字符是字母(?<=[a-zA-Z])
吗?下一个字符是数字(?=[0-9])
吗?” 如果两者都为真,则将字符串与正则表达式匹配。
该正则表达式的后半部分正相反。它会问:“前一个字符是数字(?<=[0-9])
吗?下一个字符是字母吗?(?=[a-zA-Z])
”,如果两个都是正确的,它将再次匹配。
通常,split()会删除正则表达式匹配的字符。即使对于此正则表达式也是如此。但是,由于正则表达式与0宽前瞻匹配,因此不会删除您要查找的实际字符。
请查看Adam Paynter的答案,以获取有关先行和后退的更多信息:如何在不使用Java删除分隔符的情况下使用一些分隔符拆分字符串?
归档时间: |
|
查看次数: |
7107 次 |
最近记录: |