我正在尝试创建一个正则表达式/替换对来使用replaceAll()
它将捕获目标字符串之前和之后的字符。
这是我的版本,适用于简单的情况:
String adjacent = "fooaXbcXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
根据需要产生"abcd"
(最后的展望是消耗到字符串的末尾,使单个调用replaceAll()
起作用)。
但是,当目标之后的字符也是目标之前的字符时,我似乎无法解决一个边缘情况:
String adjacent = "fooaXbXdbar".replaceAll(".*?(.)X(.).*?(?=(.X)|$)", "$1$2");
生产"ab"
,但我想"abbd"
。正则表达式消耗了匹配的前导部分,使以下输入不匹配。
我试过环顾四周,但似乎无法让它工作。
注意:我对涉及循环或代码等的解决方案不感兴趣。只是寻找适用于提到的边缘情况的正则表达式和替换字符串。