5

コマンドラインから「\t」(タブ)のような区切り文字を受け取り、それを使用してテキストファイルを解析したいと思います。

入れたら

delimiter = sys.argv[1]

コードに入力し、コマンドラインから入力します

$ python mycode.py "\t"

区切り文字は'\\t'、つまり、Pythonは入力文字列をそのまま保持することを行います。

これを'\t'に変換して、たとえば、

'a\tb\tc'.split(delimiter)

取得します['a','b','c']

'\'を'\'に変換しようとしましたが、失敗しました。

コマンドラインから正規表現を処理するための組み込みのPython関数はありますか?

4

2 に答える 2

4

Python 2では、次を使用できますstr.decode('string_escape')

>>> '\\t'.decode('string_escape')
'\t'

Python 3では、最初に文字列をバイトにエンコードしてから、次を使用する必要がありますunicode_escape

>>> '\\t'.encode().decode('unicode_escape')
'\t'

どちらのソリューションもエスケープシーケンスを受け入れ、それらを正しくデコードするため、いくつかの凝ったユニコードを使用することもできます。

>>> '\\t\\n\\u2665'.encode().decode('unicode_escape')
'\t\n♥'
于 2012-10-20T14:18:19.497 に答える
1

それはあなたが探している正規表現ではなく、エスケープシーケンスです。

ひどいセキュリティの結果を完全に認識している限り、を使用するか、独自の文字列置換/正規表現ベースのエスケープシーケンスアンスケーパーをロールすることができます。eval

(誰が知っている、多分arg = arg.replace("\\t", "\t")あなたのために十分ですか?)

回避策として、次のことができます

$ python mycode.py `echo -ne '\t'`

(ab)Unix echoコマンドを使用して、エスケープを解除します。

于 2012-10-20T14:13:33.863 に答える