如何使用regsub删除Tcl中字符串中的数字?

时间:2015-07-27 06:49:15

标签: regex tcl

我想删除字符串中的数字,但希望保留包含数字的单词。例如:

set a "t0day 1s a 234 5unny d4y 123"

预期产出:

t0day 1s a 5unny d4y

我试过如下,但它不起作用:

regsub -all {[^0-9]} $a " " a

2 个答案:

答案 0 :(得分:2)

您希望将word-boundary anchors放在这些正则表达式中。

regsub -all {\y[0-9]+\y} $a " " a

在某些情况下,这会让你留下三重空间(这对你来说可能或不重要,但是很容易清理),但它不会在单词中间替代。

答案 1 :(得分:1)

你的正则表达式并没有真正做你认为它正在做的事情。 [^0-9]匹配除数字之外的所有内容,因此会发生的一切都将被删除并遗漏数字。你可能想做的是:

regsub -all {\y[0-9]+\y} $a "" a

这将删除字符串中的数字(如果它们是单独的)。你会有一些尾随空格,为此你可以使用:

set a [string trim $a]
在重新规划之后

\y确保号码前后没有单词字符,以便0中的t0day不会被删除。