1

我试图在我的解决方案中“美化”某种类型的数字对象。这种特定类型具有以下可能的表示形式,以及它们的漂亮表示形式:

xxxxxyyyyyyy  => xxxxx-yyyyyyy
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z

基本上,该类型由 5 位数字表示FieldA,7 位数字表示FieldB和一个可选数字表示 a CheckDigit。使用以下正则表达式/替换模式:

Regex:       ^(?<FIELDA>\d{5})(?<FIELDB>\d{7})(?<CHECKDIGIT>\d?)$
Replacement: ${FIELDA}-${FIELDB}-${CHECKDIGIT}

... 结果是:

xxxxxyyyyyyy  => xxxxx-yyyyyyy-  (wrong)
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z (correct)

是否可以仅使用正则表达式/替换对来纠正第一个表示?我可以通过使用两个不同的正则表达式来完成这项工作,但我想要一个比这更优雅的解决方案。一个使用单个正则表达式/替换对。

PS。我正在使用 Java 1.7。

4

1 回答 1

0

我认为这在工具中的单个 RegEx 中是不可能的。您可以使用两个 RegEx,如下所示。

首先,将数字替换为-中间。

搜索:^(\d{5})(\d{7})(\d+)?$

代替:$1-$2-$3

第一次更换

然后,删除尾随破折号。

搜索:^(\d{5})-(\d{7})-$

代替:$1-$2

第二次更换

最终结果

于 2016-02-17T03:15:38.673 回答