正则表达式仅在某些输入上附加内容

时间:2013-02-07 20:58:26

标签: java regex

我怎样才能将字符串(此处为Calc!)仅附加到某些字词(此处为B(后面跟一个数字),例如B1/B2....),只有当该字词没有其他字词时才会在它之前附加到它的字符串(这里是Input!)。例 B1 -> Calc!B1

Input!B1 -> Input!B1(此处无变化)

Input - "=B1+B4"
Output - "=Calc!B1+Calc!B4"


Input - "=DIVIDE(B2,Input!B1)"
Output - "=DIVIDE(Calc!B2,Input!B1)"

2 个答案:

答案 0 :(得分:2)

http://www.regular-expressions.info/lookaround.html

您可以替换此匹配:

(?<!Input!)(?=B\d+)

有了这个替代品:

Calc!

更多详情:

(?<!Input!)匹配前面没有Input!的位置。

(?=B\d+)匹配后跟B\d+B且至少有一位数的位置。

它们一起匹配您要插入Calc!的位置。

答案 1 :(得分:1)

这应该有效:

String output = input.replaceAll("(?<![!])B[0-9]+", "Calc!$0");

与输入匹配的表达式构造如下:

(?<![!])B[0-9]+
 ^^^^^^ ^  ^  ^
    |   +--+--+--- Letter "B"
    |      +--+--- Followed by a digit
    |         +--- Repeated one or more times
    +------------- Unless preceded by an exclamation point

Here is a demo on ideone.