首页 > 解决方案 > 如何使用前面没有字符的分隔符拆分字符串?

问题描述

我有一个字符串str = "Jake!!!Jackson!!!Tyson\\!!!!!!Pete"

我想拆分字符串,!!!但如果之前的字符!!!"\\".

我上来了str.split("(?<!\\\\)!!!");

但输出是Jake,Jackson,Tyson\!,!!Pete,预期输出是Jake,Jackson,Tyson\!!!,Pete

这可以通过正则表达式完成吗?

标签: javaregex

解决方案


我认为以下方法可行:

(?<!\\)!!!(?=(?:!!!)*(?!!))

查看在线演示

  • (?<!\\)- 断言位置前面没有文字反斜杠。
  • !!!- 从字面上看,三个感叹号。
  • (?=- 打开积极的前瞻:
    • (?:- 打开非捕获组:
      • !!!- 从字面上看,三个感叹号。
      • )*- 关闭非捕获组并匹配 0+ 次。
    • (?!!)- 感叹号的负前瞻。
  • )- 关闭积极的前瞻。

这也会拆分一个字符串,比如Jake!!!Jackson!!!Tyson\!!!!!!!Pete包含一个 NULL (假设这就是你所追求的)。作为 Java 字符串:"(?<!\\\\)!!!(?=(?:!!!)*(?!!))"


推荐阅读