正则表达式有条件地替换

时间:2012-09-12 21:52:37

标签: java regex

我试图解决的问题是:

  

给定一个字符串,如果前两个字符中的一个或两个都是'x',则返回没有那些'x'字符的字符串,否则返回字符串不变。这比它看起来要难一点。

withoutX2("xHi") → "Hi" 
withoutX2("Hxi") → "Hi"
withoutX2("Hi") → "Hi"

我的正则表达式解决方案......不起作用。我可以从单词中删除第一个x,但删除第二个x是一个真正的痛苦。在这个例子中,我想知道在正则表达式中是否有可能删除第二个字符而不会打扰其他字符。

我尝试过的事情:

return str.replaceFirst("^.x", "");

这只是简单地用""替换前两个字母,这不是预期的。我只想替换第二个角色。

2 个答案:

答案 0 :(得分:2)

如果它不一定是基于正则表达式的解决方案,你可以使用更天真的方式:)

Split String分为两部分(如果String包含两个以上的字符)。第一部分将是它的前两个字符,第二部分是休息。从第一部分删除所有“x”并将第二部分添加到结果中。

答案 1 :(得分:1)

您应该允许第一个字母不是' x':

str.replaceFirst("^xx|^(.{0,1})x", "$1")