我试图根据两个不同的正则表达式分隔符(整数和非整数)将字符串拆分为数组,但我似乎无法获得我想要的结果。
我尝试了 string.split(regex)
的不同组合,但没有成功。如果我使用 ([^0-9]+)
我可以成功地将所有非整数分离到自己的数组中,但整数会丢失。如果我尝试进行 ([^0-9]+)([0-9]+)
的组合,我最终会得到奇怪的结果,而不是所需的输出。
我的第一次尝试是按字符拆分字符串,因此每个字符无论是什么类型,都是数组中的不同项目 string.split("")
但我需要将数字分组在一起进行操作,并且必须保留末尾的原始字符串。
给定字符串:
He1l0oo,th111s 是我的 r@nd0m 86 str1ng
输出应该是:
[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])");
那就是
- 非数字后的位置
(?<![0-9])
和数字之前(?=[0-9])
或(|
)
- 数字后的位置
(?<=[0-9])
和非数字(?![0-9])
之前
关于java - 如何根据两种正则表达式格式拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54375116/