java - 如何使用前面没有字符的分隔符拆分字符串?

标签 java regex

我有一个字符串 str = "Jake!!!Jackson!!!Tyson\\!!!!!!Pete"我想用 !!! 分割字符串但如果 !!! 之前的字符,则忽略它是 "\\" .
我上来了str.split("(?<!\\\\)!!!");但输出是 Jake,Jackson,Tyson\!,!!Pete预期输出为 Jake,Jackson,Tyson\!!!,Pete这可以通过正则表达式完成吗?

最佳答案

我认为以下方法可行:

(?<!\\)!!!(?=(?:!!!)*(?!!))
在线查看demo
  • (?<!\\) - 断言位置前面没有文字反斜杠。
  • !!! - 字面意思是三个感叹号。
  • (?= - 打开正向前瞻:
  • (?: - 打开非捕获组:
  • !!! - 字面意思是三个感叹号。
  • )* - 关闭非捕获组并匹配 0+ 次。

  • (?!!) - 感叹号的负前瞻。

  • ) - 关闭正向前瞻。

  • 这将拆分像 Jake!!!Jackson!!!Tyson\!!!!!!!Pete 这样的字符串也包括一个 NULL (假设这是你所追求的)。作为 Java 字符串:"(?<!\\\\)!!!(?=(?:!!!)*(?!!))"

    关于java - 如何使用前面没有字符的分隔符拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66158237/

    相关文章:

    java - 将方法的参数标记为 final 会使方法调用更快吗?

    java - 检查 Mongodb java 驱动程序中是否存在子字段

    c# - 正则表达式匹配第二行中的数字

    python - 如何使用正则表达式做反向搜索?

    Java - 更新窗口覆盖

    java - 在线程区域中仅执行一次某些代码

    java - 我正在尝试更新表的值 SQL 在 Java 中出现错误

    php - 如何在不使用任何内置php函数的情况下搜索字符串中连续重复的字符?

    javascript - Node.js 检查名称是否与掩码匹配

    python - 在列表中查找匹配项并使用正则表达式显示范围