String 有没有一种方法可以用于此目的

String 有没有一种方法可以用于此目的,string,tcl,trim,String,Tcl,Trim,我有一个像“a.a.b”这样的随机表达式,我需要从这个表达式中删掉“a.b”。有没有办法使用“string trimright”来达到这个目的?(我想要第一个字符“a”) 不,您不能使用string trimright。正如手册页所说,string trimright删除属于第二个参数的任何尾随字符。因此,如果你这样做 string trimright a.a.b a.b 它从a.a.b的末尾开始,删除a、或b中的任何一个,留下空字符串 要执行所需的操作,可以将正则表达式与regsub命令一起

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

不,您不能使用
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
字符,后跟literal
字符(用反斜杠转义,因为
表示任何字符),后跟字符串末尾的
b
$

这样,您不仅可以使用
a
b
字符,还可以使其更通用:

regsub {.\..$} $string ""

不,您不能使用
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
字符,后跟literal
字符(用反斜杠转义,因为
表示任何字符),后跟字符串末尾的
b
$

这样,您不仅可以使用
a
b
字符,还可以使其更通用:

regsub {.\..$} $string ""

要在某个特定字符串的结尾处删除该字符串,您不需要使用
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
}
然后(通过交互式会话)执行此操作:


要在某个特定字符串的结尾处删除该字符串,您不需要使用
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
}
然后(通过交互式会话)执行此操作:


如果字符的模式始终为“*…*”,如果第一个字符是您想要的,那么您最好选择:

lindex [split $input .] 0

这将按句点分割输入,然后为您提供第一个元素。

如果字符模式始终为“*…*”,并且如果是第一个,您可以选择:

lindex [split $input .] 0
这将按时段分割输入,然后为您提供第一个元素