2017-04-17 15 views
-1

私はtcl regexpに関する助けが必要です。私は拡張子は両方のファイルのための単一のコマンドで区切る取得する必要がありtclスクリプトのregexp

abc1 vv24 0.099B 0.00h 2ru tar.gz or gz 
  • のために単一のコマンドで以下のように分けたい

    abc1_vv24_0.099B_0.00h_2ru.tar.gz 
    abc1_vv24_0.099B_0.00h_2ru.gz 
    
    1. として、私は、ファイル名があるとし

      tar.gz or gz 
      
  • +0

    Se [「Xを実行する正規表現を」私に与えるべきですか?」という質問は閉じますか?(http://meta.stackoverflow.com/questions/285733/should-give-me-a-regex-that-does-x -questions-be-closed/285739#285739)2ru.tar.gzの代わりに –

    答えて

    0

    トンあなたが使用することができます。これは、以来、少しトリッキーだった

    /(?:\.tar)?.\w+$/gm 
    

    :これは、部分文字列

    Demo

    とパート2 Demoのために文字列を分割することができます

    /[^_]+/g 
    

    .099B_0.00h_2ru.gzは実際の内線番号

    +0

    2ruと.tar.gzを第1のファイル名で区切り、 2ruと.gzを第2のファイルから区切りたい。 – Krishh

    +0

    本当にありがとうございました:) – Krishh

    +0

    私の答えを嬉しく思います。 –

    0

    最初のステップは、分割文字をアンダースコアに設定してsplitを使用することです。その後、拡張子を抽出するために、最終要素の上に簡単な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には、必ず括弧で正規表現を置くべきで、覚えておいてください。バックスラッシュの使用を最小限に抑えて、不要な構文上の問題を防止します。

    +0

    ありがとうございます:) – Krishh

    関連する問題