替换abcde [退格] [退格] - > ABC

时间:2012-10-24 13:36:44

标签: regex

我如何构建正则表达式,以便我可以执行这样的替换:

  • abcdef[Backspace][Backspace][Backspace] - > abc
  • [Backspace][Backspace] - > (空字符串)

目前,我试图在循环中逐个替换退格。还有另一种方式吗?

2 个答案:

答案 0 :(得分:3)

首先想到的是,只要存在匹配项,就会在循环中用空字符串替换.\[Backspace\]。然后全局替换\[Backspace\]为空字符串。

编辑:在评论中提出,当我们有太多的退格时,答案效果不好。

作为解决方案,我们可以在^\[Backspace\]替换的每次迭代之前用空字符串替换所有.\[Backspace\]

假设Perl的分组规则,s/^(?:\[Backspace\])*//就可以了。

答案 1 :(得分:1)

仅仅为了完整起见,这是一个使用负面观察的解决方案(你可能打算自己使用的那个):

(^|.(?<!\[Backspace]))\[Backspace]

用空字符串替换。在循环中执行此操作。如果您正在使用Java或者在某些其他情况下需要转义反斜杠,请将两个反斜杠加倍。