我想删除字符串中的数字,但希望保留包含数字的单词。例如:
set a "t0day 1s a 234 5unny d4y 123"
预期产出:
t0day 1s a 5unny d4y
我试过如下,但它不起作用:
regsub -all {[^0-9]} $a " " a
答案 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
不会被删除。