我正在尝试根据两个不同的正则表达式定界符(整数和非整数)将字符串拆分为数组,但是我似乎无法获得想要的结果。
我尝试了string.split(regex)
的不同组合,但没有成功。如果使用([^0-9]+)
,我可以将所有非整数成功地分离到其自己的数组中,但是整数会丢失。如果我尝试结合([^0-9]+)([0-9]+)
进行操作,则会得到奇怪的结果,而不是所需的输出。
我的第一个尝试是按字符分割字符串,因此每个字符(不管是哪种类型)在数组string.split("")
上都是不同的项目,但是我需要将数字分组在一起进行操作,并且必须保留原始字符串最后。
给出字符串:
He1l0oo, th111s is my r@nd0m 86 str1ng
输出应为:
[He], [1], [l], [0], [oo, th], [111], [s is my r@nd], [0], [m ], [86], [ str], [1], [ng]
但我只能得到:
[1], [0], [111], [0], [86], [1]
我在输出中需要非整数和整数组,因此我可以将字符串以相同的格式重新连接在一起,而在此输出中,我将失去所有其他东西。任何帮助将不胜感激!
答案 0 :(得分:1)
问题在于,item_id
仅给您分隔符之间 的片段。分隔符本身(与模式匹配的子字符串)被省略。但是您的字符串中没有实际的分隔符。而是,您希望在数字和非数字之间的过渡处进行拆分。这些可以通过零宽度断言来匹配:
String.split()
那是
string.split("(?<![0-9])(?=[0-9])|(?<=[0-9])(?![0-9])");
之后和在数字(?<![0-9])
之前的位置或((?=[0-9])
)
|
之后和非数字(?<=[0-9])
之前的位置答案 1 :(得分:0)
尝试使用正则表达式
"(?:\\d+|\\D+)"
这匹配一组数字或一个非数字的数字,但不能同时匹配这两个数字。
大致来说,代码如下所示:
Pattern pattern = Pattern.compile("(?:\\d+|\\D+)");
Matcher matcher = pattern.matcher("He1l0oo, th111s is my r@nd0m 86 str1ng");
List<String> groups = new ArrayList<>();
while (matcher.find()) {
groups.add(matcher.group());
}
System.out.println(groups);