我有一个像这样的字符串列表:
A/B/C/P/E
我想使用正则表达式来捕获
A/B/C/P
并忽略尾随/E
我尝试使用:
set mystring {A/B/C/P/E}
regex -nocase -- {(.*)\/\S+} $myString match
puts $match
但
puts $match
打印
A/B/C/P/E
我做错了什么?
答案 0 :(得分:2)
你实际上做了几件事。
您有一个名为$mystring
的字符串,但您在函数中使用$myString
。
regexp
的语法是:
regexp ?switches? exp string ?matchVar? ?subMatchVar subMatchVar ...?
所以如果你想要子匹配,你需要使用另一个变量。
现在,为了让一切更清洁,你可以使用:
set myString {A/B/C/P/E}
regexp -- {(.*)/\S+} $myString -> match
puts $match
# => A/B/C/P
您不需要转义正斜杠,如果您的正则表达式中没有包含大小写的字符,则不需要-nocase
标记。
整个匹配存储在名为->
的变量和match
中的第一个子匹配中。
答案 1 :(得分:0)
替代方法:拆分字符串,除了最后一个元素之外,重新加入列表:
% set mystring {A/B/C/P/E}
A/B/C/P/E
% set new [join [lrange [split $mystring /] 0 end-1] /]
A/B/C/P