java - 如何根据两种正则表达式格式拆分字符串?

标签 java regex

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

我尝试了 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/

相关文章:

java - 如果服务器从 SSL 切换到 TLS,是否会有任何客户端(java 代码)更改

java - 如何通过java使用appium和selenium处理webview

r - 从字符串中提取数字,如果它后跟 R 中的某些字符

python - 替换所有列 pandas df 中的多个字符

mysql - 如何在 mysql 中编写正则表达式前瞻/后视

php - 在 php 中使用 preg_split 从字符串中获取单词

java - 将文件名添加到java中的数组列表

java - 为什么 "=="对于整数和字符串引用的工作方式不同?

java - 字符串到 int。无效整数

python - 匹配不以已知字符串列表结尾的字符串