我认为这应该返回“州,国家”,但它正在返回“国家”
System.out.println("city,state,country".replaceAll("(.*,)?", ""));
为什么它以这种方式工作,如何让它返回“州,国家”。我希望这个答案是一个正则表达式。
答案 0 :(得分:12)
.*
变得非贪婪,您需要在?
之后立即添加*
。replaceAll
会替换所有匹配部分,因此您应该使用replaceFirst
尝试
System.out.println("city,state,country".replaceFirst(".*?,", ""));
输出:
state,country
如果您无法使用replaceFirst
而需要与replaceAll
保持联系,那么@Reimeus answer可能正是您所寻找的。 p>
答案 1 :(得分:7)
顾名思义,replaceAll
取代所有匹配的组。您需要更具体地匹配组的位置。要指定第一个匹配组,您可以将String
^
的开头指定为锚:
"city,state,country".replaceAll("^(.*?,)", "")
答案 2 :(得分:4)
您正在捕获以逗号结尾的任何组,而不只是一个,这就是它目前无效的原因。
System.out.println("city,state,country".replaceAll("^[^,]*+,", ""));
答案 3 :(得分:1)
尝试使用此表达式:
^(.*?,)
或者那样:
System.out.println("city,state,country".replaceAll("(.*?,)((?:.*?,)+)", "$2"));
答案 4 :(得分:0)
?非贪婪标志只能在+或*之后使用,在您的上下文中,它是0或1匹配。
你想要
System.out.println("city,state,country".replaceAll("(.*?,)", ""));