Java 如何基于两种正则表达式格式拆分字符串?

Java 如何基于两种正则表达式格式拆分字符串?,java,regex,Java,Regex,我试图根据两个不同的正则表达式分隔符(整数和非整数)将字符串拆分为数组,但似乎无法得到想要的结果 我尝试了string.split(regex)的不同组合,但没有成功。如果我使用([^0-9]+)我可以成功地将所有非整数一起分离到它自己的数组中,但是整数丢失了。如果我尝试组合使用([^0-9]+)([0-9]+),我会得到奇怪的结果,而不是期望的输出 我的第一次尝试是按字符拆分字符串,因此每个字符无论是什么类型,都是数组string上的不同项。拆分(“”),但我需要将数字分组在一起进行操作,并且

我试图根据两个不同的正则表达式分隔符(整数和非整数)将字符串拆分为数组,但似乎无法得到想要的结果

我尝试了
string.split(regex)
的不同组合,但没有成功。如果我使用
([^0-9]+)
我可以成功地将所有非整数一起分离到它自己的数组中,但是整数丢失了。如果我尝试组合使用
([^0-9]+)([0-9]+)
,我会得到奇怪的结果,而不是期望的输出

我的第一次尝试是按字符拆分字符串,因此每个字符无论是什么类型,都是数组
string上的不同项。拆分(“”
),但我需要将数字分组在一起进行操作,并且必须在最后保留原始字符串

给定字符串:

He1l0oo,这是我的r@nd0m86 STRNG

输出应为:

[He],[1],[l],[0],[oo,th],[111],[s是我的r@nd],[0],[m],[86],[str],[1],[ng]

但我只得到:

[1]、[0]、[111]、[0]、[86]、[1]


我需要输出中的非整数组和整数组,这样我就可以以相同的格式将字符串重新连接在一起,而使用此输出,我将丢失所有其他内容。任何帮助都将不胜感激

问题在于
String.split()
只提供分隔符之间的片段。分隔符本身——与模式匹配的子字符串——被省略。但是字符串中没有实际的分隔符。相反,您希望在数字和非数字之间的转换处拆分。这些可以通过零宽度断言进行匹配:

string.split("(?<![0-9])(?=[0-9])|(?<=[0-9])(?![0-9])");
string.split((?尝试使用正则表达式

"(?:\\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);
Pattern=Pattern.compile((?:\\d+\\d+);
Matcher Matcher=pattern.Matcher(“He1l0oo,th111s是我的r@nd0m86 STRNG”);
列表组=新的ArrayList();
while(matcher.find()){
添加(matcher.group());
}
系统输出打印项次(组);

查看有关如何使用
模式
匹配器
类的更多信息。谢谢,这正是我所需要的。我过去只在简单任务中使用基本正则表达式,并尝试匹配组,但没有意识到我需要在两者之间设置特定的分隔符。这非常有用,再次感谢!