5

我想从命令行接收像 '\t' (tab) 这样的分隔符,并用它来解析文本文件。

如果我把

delimiter = sys.argv[1]

在代码中,然后从命令行键入

$ python mycode.py "\t"

delimiter 是'\\t'ie,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'

两种解决方案都接受任何转义序列并正确解码它们,因此您甚至可以使用一些花哨的 unicode 东西:

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

您正在寻找的不是真正的正则表达式,而是转义序列。

只要您完全意识到可怕的安全后果,您就可以使用,或者滚动您自己的基于字符串替换/正则表达式的转义序列 unescaper。eval

(谁知道,也许arg = arg.replace("\\t", "\t")对你来说已经足够了?)

作为一种解决方法,你可以做

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

(ab) 使用 Unix echo 命令为您执行转义。

于 2012-10-20T14:13:33.863 回答