使用正则表达式匹配给定列表中的升序和降序

时间:2015-08-17 11:39:57

标签: regex tcl

在给定列表中使用正则表达式匹配升序和降序。

set a {35214}

根据在场状态的顺序,我想知道它是升序还是降序。

12345→升序

54321→降序

1 个答案:

答案 0 :(得分:2)

第二次尝试......(见第一次尝试的底部)

对数字序列进行排序:

set a 35214
# ascending order:
join [lsort -integer [split $a {}]] {}
# -> 12345
# descending order:
join [lsort -integer -decreasing [split $a {}]] {}
# -> 54321
正如您所想,

{12345}不是数字列表,而是包含五位数的字符串。这些数字的列表可以写为文字{1 2 3 4 5}"1 2 3 4 5"(括号或引号是告诉解释器我们希望这是一个列表值而不是五个值),或者作为表达式list 1 2 3 4 5

按升序排序数字或整数值列表:

set a {3 5 2 1 4}
lsort -integer $a
# -> 1 2 3 4 5

如果值以字符串形式打包,则需要将其拆分:

set a 35214
lsort -integer [split $a {}]
# -> 1 2 3 4 5

如果您希望排序结果为打包字符串:

set a 35214
join [lsort -integer [split $a {}]] {}
# -> 12345

按降序排序:

set a 35214
join [lsort -integer -decreasing [split $a {}]] {}
# -> 54321

文档:joinlistlsortsetsplit

<小时/> 我第一次尝试获得+1,所以我不想完全放弃它,但OTOH似乎远不及提问者所希望的。您可以找到经过轻微编辑的答案on my personal blog