从 TCL 中的字符串中提取整数

oak*_*208 2 tcl

我在这个模式中有一个字符串:

2(some_substring) -> 3(some_other_substring)

现在这些数字可以是任何东西。

我认为这个答案可以解决问题。但它给出了一个变量中的所有整数。我希望它们处于不同的变量中,以便我可以分析它们。我们可以分开吗?但是拆分会导致问题:

如果数字不是个位数,则拆分将是错误的。

有没有其他办法?

Jer*_*rry 5

您可以使用此变体:您可以将所有数字字符提取到列表中,而不是删除非数字字符:

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]+匹配至少一个整数。