我在这个模式中有一个字符串:
2(some_substring) -> 3(some_other_substring)
现在这些数字可以是任何东西。
我认为这个答案可以解决问题。但它给出了一个变量中的所有整数。我希望它们处于不同的变量中,以便我可以分析它们。我们可以分开吗?但是拆分会导致问题:
如果数字不是个位数,则拆分将是错误的。
有没有其他办法?
您可以使用此变体:您可以将所有数字字符提取到列表中,而不是删除非数字字符:
set text {2(some_substring) -> 3(some_other_substring)}
set numbers [regexp -all -inline -- {[0-9]+} $text]
puts $numbers
# => 2 3
Run Code Online (Sandbox Code Playgroud)
要获取每个数字,您可以使用lindex:
puts [lindex $numbers 0]
# => 2
Run Code Online (Sandbox Code Playgroud)
或者在 8.5 及更高版本中,您可以使用lassign将它们分配给特定的变量名称:
lassign $numbers first second
puts $first
# => 2
puts $second
# => 3
Run Code Online (Sandbox Code Playgroud)
在 中regexp -all -inline -- {[0-9]+} $text,-all提取所有匹配项,-inline将匹配项放入列表中,--结束选项,[0-9]+匹配至少一个整数。