gpt4 book ai didi

Java 拆分正在吞噬我的角色

转载 作者:太空狗 更新时间:2023-10-29 22:45:12 28 4
gpt4 key购买 nike

我有一个像这样的字符串String str = "la$le\\$li$lo"

我想拆分它以获得以下输出 "la","le\\$li","lo"。\$ 是一个 $ 转义,所以它应该留在输出中。

但是当我执行 str.split("[^\\\\]\\$") 时,您会得到 "l","le\\$l","lo ".

据我所知,我的正则表达式匹配 a$ 和 i$ 然后删除。知道如何恢复我的角色吗?

谢谢

最佳答案

使用零宽度匹配断言:

    String str = "la$le\\$li$lo";
System.out.println(java.util.Arrays.toString(
str.split("(?<!\\\\)\\$")
)); // prints "[la, le\$li, lo]"

正则表达式本质上是

(?<!\\)\$

它使用负向回顾来断言前面没有\

另见


更多基于断言的拆分示例

简单的分句,保留标点符号:

    String str = "Really?Wow!This.Is.Awesome!";
System.out.println(java.util.Arrays.toString(
str.split("(?<=[.!?])")
)); // prints "[Really?, Wow!, This., Is., Awesome!]"

使用 \G 将长字符串拆分为固定长度的部分

    String str = "012345678901234567890";
System.out.println(java.util.Arrays.toString(
str.split("(?<=\\G.{4})")
)); // prints "[0123, 4567, 8901, 2345, 6789, 0]"

使用后视/前视组合:

    String str = "HelloThereHowAreYou";
System.out.println(java.util.Arrays.toString(
str.split("(?<=[a-z])(?=[A-Z])")
)); // prints "[Hello, There, How, Are, You]"

相关问题

关于Java 拆分正在吞噬我的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2819933/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com