java - 如何使用前面没有字符的分隔符拆分字符串?
问题描述
我有一个字符串str = "Jake!!!Jackson!!!Tyson\\!!!!!!Pete"
我想拆分字符串,!!!
但如果之前的字符!!!
是"\\"
.
我上来了str.split("(?<!\\\\)!!!");
但输出是Jake,Jackson,Tyson\!,!!Pete
,预期输出是Jake,Jackson,Tyson\!!!,Pete
这可以通过正则表达式完成吗?
解决方案
我认为以下方法可行:
(?<!\\)!!!(?=(?:!!!)*(?!!))
查看在线演示
(?<!\\)
- 断言位置前面没有文字反斜杠。!!!
- 从字面上看,三个感叹号。(?=
- 打开积极的前瞻:(?:
- 打开非捕获组:!!!
- 从字面上看,三个感叹号。)*
- 关闭非捕获组并匹配 0+ 次。
(?!!)
- 感叹号的负前瞻。
)
- 关闭积极的前瞻。
这也会拆分一个字符串,比如Jake!!!Jackson!!!Tyson\!!!!!!!Pete
包含一个 NULL (假设这就是你所追求的)。作为 Java 字符串:"(?<!\\\\)!!!(?=(?:!!!)*(?!!))"
推荐阅读
- php - 如何得到阴性结果?dff
- java - Spring Batch Integration Test - 运行时无法访问作业参数
- google-sheets - 当我尝试使用查询公式时,“错误”消息不断出现
- python-3.x - 自动编码器训练后使用编码器模型进行预测时出错
- mysql - 合并 MySQL 表中的多行
- java - 在 Java 9+ 中渲染高分辨率 RenderedImages 时我们可以绕过 HiDPI UI 缩放吗
- linux - linux上的电子更新器自动更新
- java - 使用 lambda 遍历多个嵌套列表
- isabelle - 如何在 Isabelle/HOL 的引理之外获取见证实例
- reactjs - 来自 useState 的 React 调用函数,例如 useState(func())