質問

エスケープ文字の文字列と一致するように機能する正規表現を見つけようとしています (Expect 応答、を参照) この質問) と 6 桁の数字 (最初の文字は英数字)。

識別する必要がある文字列全体は次のとおりです。

\r\n\u001b[1;14HX76196

最終的には文字列を抽出する必要があります。

X76196 

私がすでに持っているものは次のとおりです。

interact {
        #...
        #...
        #this expression does not identify the screen location
        #I need to find "\r\n\u001b[1;14H" AND "([a-zA-Z0-9]{1})[0-9]{5}$"
        #This regex was what I was using before.
        -nobuffer -re {^([a-zA-Z0-9]{1})?[0-9]{5}$} {
                set number $interact_out(0,string)
        }   

エスケープ文字を識別して、それがその画面領域のフィールドであることを確認する必要があります。したがって、その最初の部分を含む正規表現が必要ですが、バックスラッシュが私を混乱させています...

また、$number 変数に完全な文字列を取得したら、Tcl の別の変数の数値だけを分離するにはどうすればよいですか?

役に立ちましたか?

解決 2

さらに掘り下げてみると、いくつかのことが分かりました。まず第一に、私はプログラムの出力ではなく、ユーザーの入力を見ていました。プログラムの出力を確認するには、「-o」フラグを追加する必要がありました。また、正規表現を必要な部分のみに短縮しました。

正規表現の例 @リク 私は、彼または私自身の正規表現がなぜ失敗するのかを調べるようになりました。それは、私が出力ではなく入力を見ていたという事実によるものでした。したがって、私が試した元の正規表現には問題はありませんでしたが、調べられていたデータに問題がありました(「-o」フラグが欠落していました)

これが私の問題に対する完全な答えです。

interact {
#...
    -o -nobuffer -re {(\[1;14H[a-zA-Z0-9]{1})[0-9]{5}} {
            #get number in place
            set numraw $interact_out(0,string)
            #get just number out
            set num [string range $numraw 6 11] 
            #switch to lowercase
            set num [string tolower $num]
            send_user "  stored number: $num"
    }   
}

私は Expect と Tcl を使用した noob したがって、これが意味をなさない場合、またはインタラクション フラグについてさらに洞察がある場合は、はっきりさせてください。

他のヒント

最後に数字だけを表示したい場合は、これで十分です...

[0-9]{6}

新しい情報で更新します

が、リテラルの \ の後にリテラルの n が続くのではなく、改行文字であると仮定すると、次のようにすることができます...

\r\n\u001B\[1;14H(X[0-9]{5})
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top