正则表达式 :: 复杂替换
Regex :: Complex Substitutions
我正在尝试 "prettify" 我的解决方案中的某种类型的数字对象。这种特殊类型具有以下可能的表示形式,以及它们的漂亮表示形式:
xxxxxyyyyyyy => xxxxx-yyyyyyy
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z
基本上,该类型由表示 FieldA
的 5 位数字、表示 FieldB
的 7 位数字和表示 CheckDigit
的可选数字组成。使用以下 regex/replace 模式:
Regex: ^(?<FIELDA>\d{5})(?<FIELDB>\d{7})(?<CHECKDIGIT>\d?)$
Replacement: ${FIELDA}-${FIELDB}-${CHECKDIGIT}
... 结果:
xxxxxyyyyyyy => xxxxx-yyyyyyy- (wrong)
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z (correct)
是否可以仅使用 regex/replace 对来更正第一个表示? 我可以使用两个不同的正则表达式来完成这项工作,但我想要一个比这更优雅的解决方案。一个使用单个 regex/replacement 对。
PS。我正在使用 Java 1.7.
我认为在该工具的单个 RegEx 中这是不可能的。您可以使用两个 RegEx,如下所示。
首先,将中间的数字替换为-
。
Search: ^(\d{5})(\d{7})(\d+)?$
Replace: --
然后,删除结尾的破折号。
Search: ^(\d{5})-(\d{7})-$
Replace: -
我正在尝试 "prettify" 我的解决方案中的某种类型的数字对象。这种特殊类型具有以下可能的表示形式,以及它们的漂亮表示形式:
xxxxxyyyyyyy => xxxxx-yyyyyyy
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z
基本上,该类型由表示 FieldA
的 5 位数字、表示 FieldB
的 7 位数字和表示 CheckDigit
的可选数字组成。使用以下 regex/replace 模式:
Regex: ^(?<FIELDA>\d{5})(?<FIELDB>\d{7})(?<CHECKDIGIT>\d?)$
Replacement: ${FIELDA}-${FIELDB}-${CHECKDIGIT}
... 结果:
xxxxxyyyyyyy => xxxxx-yyyyyyy- (wrong)
xxxxxyyyyyyyz => xxxxx-yyyyyyy-z (correct)
是否可以仅使用 regex/replace 对来更正第一个表示? 我可以使用两个不同的正则表达式来完成这项工作,但我想要一个比这更优雅的解决方案。一个使用单个 regex/replacement 对。
PS。我正在使用 Java 1.7.
我认为在该工具的单个 RegEx 中这是不可能的。您可以使用两个 RegEx,如下所示。
首先,将中间的数字替换为-
。
Search:
^(\d{5})(\d{7})(\d+)?$
Replace:
--
然后,删除结尾的破折号。
Search:
^(\d{5})-(\d{7})-$
Replace:
-