Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
tcl脚本中的regexp_Regex_Tcl - Fatal编程技术网

tcl脚本中的regexp

tcl脚本中的regexp,regex,tcl,Regex,Tcl,我需要tcl regexp的帮助。假设我有一个文件名为 abc1_vv24_0.099B_0.00h_2ru.tar.gz abc1_vv24_0.099B_0.00h_2ru.gz 我想像下面一样在单个命令中为 abc1 vv24 0.099B 0.00h 2ru tar.gz or gz 我需要在一个命令中为两个文件分别获取扩展名 tar.gz or gz 对于第一部分,您可以使用: /[^_]+/g 这将允许您将字符串拆分为子字符串 第二部分: 这有点棘手,因为.099B

我需要tcl regexp的帮助。假设我有一个文件名为

abc1_vv24_0.099B_0.00h_2ru.tar.gz 
abc1_vv24_0.099B_0.00h_2ru.gz 
  • 我想像下面一样在单个命令中为

    abc1 vv24 0.099B 0.00h 2ru tar.gz or gz
    
  • 我需要在一个命令中为两个文件分别获取扩展名

    tar.gz or gz
    

  • 对于第一部分,您可以使用:

    /[^_]+/g
    
    这将允许您将字符串拆分为子字符串

    第二部分:


    这有点棘手,因为
    .099B_0.00h_2ru.gz
    是实际的扩展名

    第一步是使用
    拆分
    ,拆分字符设置为下划线。然后,您可以在最后一个元素上使用简单的
    regexp
    来提取扩展名:

    set filename "abc1_vv24_0.099B_0.00h_2ru.tar.gz" 
    
    set pieces [split $filename "_"] 
    regexp {([^.]*)\.(.*)} [lindex $pieces end] -> bit ext
    # Put the bit before the extension back in the list
    lset pieces end $bit
    
    puts $pieces
    puts $ext
    

    请记住,在Tcl中,您应该始终将正则表达式放在大括号中。它使用最少的反斜杠来停止不必要的语法问题

    在第一部分中,Se而不是2ru.tar.gz,我希望第一个文件名中的2ru和.tar.gz分开,第二个文件名中的2ru和.gz分开。正则表达式不使用Tcl语法。
    set filename "abc1_vv24_0.099B_0.00h_2ru.tar.gz" 
    
    set pieces [split $filename "_"] 
    regexp {([^.]*)\.(.*)} [lindex $pieces end] -> bit ext
    # Put the bit before the extension back in the list
    lset pieces end $bit
    
    puts $pieces
    puts $ext