将字符串自动压缩为正则表达式

时间:2015-05-14 12:22:42

标签: regex compression

给定一组字符串,我想自动将每个字符串压缩成最小长度的正则表达式。如果这些字符串相同,则两个不同字符串的正则表达式应该相同。

例如:

字符串1:ABCCCCCCCCABCCCCCCCCCCBBC =(AB [C] {8}){2} CCBBC

字符串2:ABCCCCABCCCCCCCCCCBBC =(AB [C] {4}){2} C {6} BBC

*这是压缩的一个例子,即使它可能不是最简单的方法。

请注意字符串长度很重要:不需要使用B {2}来表示字符串BB,因为这会占用更多字符。

是否有既定方法可以做到这一点?

答案将指向对此问题的任何学术调查,并提供对此问题的解释和/或解决方案,无论是理论问题还是实施问题。在后一种情况下,如果这个实现是在Java中,我更喜欢它。

1 个答案:

答案 0 :(得分:1)

与您的示例不同,并且尺寸不是最小,而是一种方法。

"ABCCCCCCCCABCCCCCCCCCCBBC".replace(/(([A-Z])\2{3,})/g,function($0,$1,$2){return $2+$1.length}).replace(/(\d+)/g,'{$1}')
"ABC{8}ABC{10}BBC"

"ABCCCCABCCCCCCCCCCBBC".replace(/(([A-Z])\2{3,})/g,function($0,$1,$2){return $2+$1.length}).replace(/(\d+)/g,'{$1}')
"ABC{4}ABC{10}BBC"