我有一个文本文件,其中包含的行为类似于C字符串。例如:
something = "some text\nin two lines\tand tab";
somethingElse = "some text with \"quotes\"";
在引号之间取物不是问题。问题是,以后我处理这个字符串和斜线转义会使这很难。
我想解码这些字符串,处理它们,然后将它们编码回C字符串文字。
所以从那个原始输入
some text\\with line wrap\nand \"quote\"
我需要:
some text\with line wrap
and "quote"
反之亦然。
我尝试了什么:
我找到some API来处理Python string literals(string_escape
),它接近我需要的,但是因为我处理C字符串,所以无用。我试过找其他编解码器来匹配我的问题,但到目前为止还没有运气。
答案 0 :(得分:0)
我也在寻找一个简单的解决方案,而json
模块似乎是最简单的解决方案。以下是我的快速技巧。请注意,如果/当两者都在同一字符串中出现单引号(')和双引号(“)时,仍然存在问题... 并且我怀疑您会遇到问题带有Unicode字符...
def c_decode(in_str:str) -> str:
return json.loads(in_str.join('""' if '"' not in in_str else "''"))
def c_encode(in_str:str) -> str:
""" Encode a string literal as per C"""
return json.dumps(in_str)[1:-1]
还要注意,如果in_str
是"AB\n\r\tYZ"
...
then we alternatively have: ("%r"%(in_str.join('""')))[2:-2]
giving: 'AB\\n\\r\\tYZ' # almost the same c_encode above.
在这里希望某人有更好的解决方案。