我有一个像“a.a.b”这样的随机表达式我需要从这个表达式中修剪“a.b”。有没有办法为此目的使用“string trimright”? (我想要第一个字符“a”)。
答案 0 :(得分: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
字符,然后是一个文字.
字符(使用反斜杠转义,因为.
表示 any < / em> character),后跟b
,位于字符串的末尾($
)。
这样您不仅限于a
和b
字符,还可以使其更通用:
regsub {.\..$} $string ""
答案 1 :(得分: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.
答案 2 :(得分:1)
如果字符的模式总是“&lt; something&gt; 。*&lt; something&gt; ... *”,那么如果第一个&lt; something&gt;,你可能最好的选择:
lindex [split $input .] 0
这会将输入分为句点,然后给你第一个元素。