有没有办法使用字符串修剪为此目的

时间:2012-11-05 04:49:25

标签: string tcl trim

我有一个像“a.a.b”这样的随机表达式我需要从这个表达式中修剪“a.b”。有没有办法为此目的使用“string trimright”? (我想要第一个字符“a”)。

3 个答案:

答案 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,位于字符串的末尾($)。

这样您不仅限于ab字符,还可以使其更通用:

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

这会将输入分为句点,然后给你第一个元素。