正则表达式::复杂替代品

时间:2016-02-17 03:07:36

标签: regex string-substitution

我正在努力"美化"我的解决方案中的某种类型的数字对象。此特定类型具有以下可能的表示形式,以及它们的漂亮表示:

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

基本上,该类型由5个数字组成,表示FieldA,7个数字表示FieldB,可选数字表示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。

1 个答案:

答案 0 :(得分:0)

我不认为这可以在工具中的单个RegEx中实现。您可以使用以下两个RegEx。

首先,用中间的-替换数字。

  

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

     

替换:$1-$2-$3

First Replacement

然后,删除尾部短划线。

  

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

     

替换:$1-$2

Second Replacement

End Result