我需要转换一个包含单引号和双引号以及换行符的字符串,以便在系统调用中使用。考虑以下输入字符串:
"""one'two\nthree"four"""
这应该转换为以下输出字符串:
"$'one\'two\nthree\"four'"
这样它就可以在 git
提交命令中作为消息参数提交:
git commit --message=$'one\'two\nthree\"four'
带有前导 $
和周围单引号 '
的奇怪语法是 bash 结构,在 bash 联机帮助页的引用部分(搜索 QUOTING)中有所描述。我尝试了很多 python 函数,包括 str.replace
、re.sub
、json.dumps
、repr
和str.encode('unicode-escape')
。但没有一个产生所需的转变。看来,在这种情况下,python 太高级了。我们将非常感谢收到关于如何进行的建议。
系统调用本身将使用如下代码进行(为清楚起见,省略了 try
block ):
import subprocess
call = ["git", "commit", "--message", "'one\'two\nthree\"four'"]
cpi = subprocess.run(call)
我可能还会使用一些描述的 git 库,但我还没有为此做功课。
注意:上面call
列表中最后一项中不必要的$
字符已被删除。
最佳答案
目前您想要的命令是错误的,它不是有效的 Python 字符串,因为缺少正确的 "
,它应该是:
"$'one\'two\nthree\"four'"
这很容易通过简单的 .format
调用构建:
>>> "$'{}'".format("""one'two\nthree"four""") == "$'one\'two\nthree\"four'"
True
关于python - 创建单独转义的单引号和双引号,其中也存在换行符/python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537271/