我有一个像“aab”这样的随机表达式,我需要从这个表达式中修剪“ab”。有没有办法为此目的使用“string trimright”?(我想要第一个字符“a”)。
问问题
247 次
3 回答
3
不,你不能使用string trimright
. 正如手册页所说,string trimright
删除属于第二个参数的任何尾随字符。因此,如果你这样做
string trimright a.a.b a.b
它从末尾开始a.a.b
并删除任何a
,.
或b
, 留下空字符串。
要执行您需要的操作,您可以在regsub
命令中使用正则表达式:
regsub {a\.b$} a.a.b ""
给你正确的字符串
a.
正则表达式(第一个参数)表示:取一个a
字符,后跟一个文字.
字符(用反斜杠转义,因为.
表示任何字符),然后是b
字符串末尾的 a ($
)。
这样,您不仅限于a
andb
字符,还可以使其更通用:
regsub {.\..$} $string ""
于 2012-11-05T09:01:19.203 回答
2
要在末尾删除特定字符串,请不要使用string trimright
(它的第二个参数实际上是一个字符集,只是碰巧写成一个字符串)。相反,您应该使用regsub
如下代码:
proc removeIfLast {mainString toRemove} {
set r [string length $toRemove]
if {$toRemove eq [string range $mainString end-[expr {$r-1}] end]} {
return [string range $mainString 0 end-$r]
}
return $mainString
}
这将执行此操作(来自交互式会话):
% removeIfLast "a.a.b" "a.b"
a.
于 2012-11-05T11:51:58.180 回答
1
如果字符模式始终是“<something> .*<something>...*”,并且如果第一个<something> 是你想要的,那么你最好选择:
lindex [split $input .] 0
这将在句点上拆分输入,然后为您提供第一个元素。
于 2012-11-05T13:52:22.133 回答