したがって、次のような入力があります。12_34 5_6_8_2 4_____3 1234
そして、そこから必要な出力は次のとおりです。1234, 5682, 43, 1234
私r'[0-9]+[0-9_]*'.replace('_','')
が知る限り、数字とアンダースコアの組み合わせではない入力を正常に拒否します。アンダースコアは最初の文字にすることはできません。
ただし、_ を空の文字列に置き換えると、12_34 が 12 と 34 として出力されます。
これを「置き換える」よりも良い方法はありますか? または、この問題に対処するために正規表現を適応させることはできますか?
編集:以下のコメントで質問に答えていましたが、ここで指定したほうがよいことに気付きました。したがって、大まかな目的は、長い入力文字列を取得することです (小さな例: "12_34 + 'Iamastring#' I_am_an_Ident" を返します: ('NUMBER', 1234), ('PLUS', '+'), ('STRING' , 'Iamastring#'), ('IDENT', 'I_am_an_Ident') 数値以外はすべて指定どおりに機能しているため、すべてを実行したくありませんでした。ソリューション コードは次のようになります。tokens = ('PLUS', 'MINUS', 'TIMES', 'DIVIDE', 'IDENT', 'STRING', 'NUMBER') t_PLUS = "+" t_MINUS = '-' 等々: t_NUMBER = ## #ここにコードが入ります I'