我有一个字符串 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/