我有一个关于在TCL中获取特定字符后字符串的可能性的问题。
我的意思是:
输入:
abcdefgh = hgfedcba
输出:
hgfedcba
(返回“=”之后的所有内容,没有可能的空格)
这就是我使用的:
regexp {abcdefgh=\s+"(.*)"} $text_var all variable
在某些情况下,它是可以的(带空格),但是当没有空格时,它就不起作用了。
答案 0 :(得分:1)
假设
% set s {abcdefgh = hgfedcba}
# => abcdefgh = hgfedcba
(或者没有一个或两个空白的同一个东西)你可以做其中一个:
% scan $s {%*[^=]= %s}
# => hgfedcba
(扫描字符串以查找不包含“=”的子字符串,然后超过等号和可选空格,然后返回字符串的其余部分。)
string trim [lindex [split $s =] 1]
(将字符串拆分为等号,返回(空白修剪的)第二个结果元素。)
string trim [string range $s [string first = $s]+1 end]
(返回等号后面的(空格修剪的)子字符串。)
string trim [lindex [regexp -inline {[^=]+$} $s] 0]
(返回(空白修剪的)第一个匹配的一个或多个字符,不包括等号,锚定在字符串的末尾。)
lindex [regexp -inline -all {[a-h]+} $s] 1
(将连续字符的第二个匹配从“a”设置返回到“h”。)
string trimleft [string trimleft $s {abcdefgh }] {= }
(从集合“a”中出现的字符串开头的所有字符移除到“h”并留空,然后从结果字符串的开头删除任何等号或空格的字符。)
答案 1 :(得分:0)
% regexp {abcdefgh\s*=\s*(\S+)} "abcdefgh = hgfedcba" all variable
1
% set variable
hgfedcba
% regexp {abcdefgh\s*=\s*(\S+)} "abcdefgh=hgfedcba" all variable
1
% set variable
hgfedcba
%