我有一堆数据我通过Tcl解析但在使用lindex字符串时遇到问题,因为它包含反斜杠.
例如,
$data is a list split by lines,
{123 somethinghere/somethingthere/\idontcare 123ff}
{456 apples/oranges/\bananas 921}
{999 pikachu/ratata/\snorlax ftp}
Run Code Online (Sandbox Code Playgroud)
我循环$data并用于lindex分割这些数据并根据其类型对其进行分组:
foreach item $data {
set num [lindex $item 0]
set paths [lindex $item 1]
set output [lindex $item 2]
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,反斜杠逃避了我想要的文本.
puts "$paths"
somethinghere/somethingthere/dontcare
Run Code Online (Sandbox Code Playgroud)
理想情况下,我甚至不想保留反斜杠.我的首选数据$path是:
puts "$paths"
somethinghere/somethingthere/idontcare
Run Code Online (Sandbox Code Playgroud)
建议?我不想使用正则表达式,除非这是唯一的方法.
列表的第一条规则是:不要将非列表事项视为列表(嗯,有例外,但你的数据是一个很好的例子,为什么你应该遵循99%的情况下的规则).
要将字符串正确转换为列表,请使用split:
set i [split $item " "]
Run Code Online (Sandbox Code Playgroud)
如果拆分字符是可变的或多个char使用regexp:
set i [regexp -inline -all {\S+} $item]
Run Code Online (Sandbox Code Playgroud)
通过使用返回列表的命令,您可以确保获得正确的列表.除非你100%确定(异常)字符串并不总是可以解析为列表.
现在,至于如何摆脱\.你当然可以使用正则表达式:
set item [regsub -all {\\} $item]
Run Code Online (Sandbox Code Playgroud)
但是有一个更好的方法来做到这一点,而不使用正则表达式(我相信你会很感激),使用string map:
set item [string map {"\\" ""} $item]
Run Code Online (Sandbox Code Playgroud)