java - 如何根据两种正则表达式格式拆分字符串?
问题描述
我正在尝试根据两个不同的正则表达式分隔符、整数和非整数将字符串拆分为一个数组,但我似乎无法得到我想要的结果。
我尝试了不同的组合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]
我需要输出中的非整数组和整数组,这样我就可以以相同的格式将字符串重新连接在一起,并且使用这个输出我会丢失其他所有内容。任何帮助将不胜感激!
解决方案
问题是String.split()
它只给你分隔符之间的部分。分隔符本身——匹配模式的子字符串——被省略。但是您的字符串中没有实际的分隔符。相反,您希望在数字和非数字之间的转换处进行拆分。这些可以通过零宽度断言进行匹配:
string.split("(?<![0-9])(?=[0-9])|(?<=[0-9])(?![0-9])");
那是
- 非数字之后
(?<![0-9])
和数字之前的位置(?=[0-9])
或 ( |
)
- 一个数字之后
(?<=[0-9])
和一个非数字之前的位置(?![0-9])
推荐阅读
- javascript - 设计一个无法看到文本的透明标题栏
- php - API平台自定义get操作
- javascript - 子组件更新时反应不重新渲染
- git - 如何确保我的 git 预提交脚本不会被愚弄?
- r - 如何从线性模型中提取系数而不在 R 中重复我的代码?
- javascript - Ember 输入类型数字只允许在 Decimal 后输入 2 位数字
- flutter - 在合并请求中在 GitLab CI 上格式化 Flutter 代码库
- nlp - 从 HTML 中提取属性值,如文本尸体
- vue.js - SSR index.html 编译
- python - 如何在连接上使用石墨烯数据加载器以及如何仅选择必要的字段