我正在解析文件中的值,其中一些可以是字符串文字,用双引号括起来。要获得实际值,我必须删除双引号:
xml
但是,某些值包含转义双引号,可以在最后:
popup menu
你在这里看到我的问题:当我将文件写回来并使其无法读取时,转义的双引号会被删除,留下孤立的双引号。我能做到:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_apply"
android:orderInCategory="100"
android:title="Apply" />
</menu>
使用前面的例子:
>>> raw_value = r'"I am a string"'
>>> processed_value = raw_value.strip('"')
>>> print(processed_value)
I am a string
所以现在,如果缺少尾随双引号,它甚至可以工作。是否有更多的pythonic方法,例如使用内置的>>> raw_value = r'"Simon said: \"Jump!\""'
>>> processed_value = raw_value.strip('"')
>>> print(processed_value)
Simon said: \"Jump!\
?如果没有,我的方法中是否有任何错误或漏洞?
更新
我想我的函数会为def unique_strip(some_str):
beginning = 1 if some_str.startswith('"') else 0
end = -1 if some_str.endswith('"') and some_str[-2] != "\\" else None
return some_str[beginning:end]
之类的输入引发>>> unique_strip(raw_value)
'Simon said: \\"Jump!\\"'
>>> raw_value = r'"Simon said: \"Jump!\"'
>>> unique_strip(raw_value)
'Simon said: \\"Jump!\\"'
。也许吧:
strip
答案 0 :(得分:1)
最简单但不安全的方法是将\"
替换为其他地方不会出现的字符串。剥离,然后更换。
raw_value = r'"Simon said: \"Jump!\""'
IMPOSSIBLE_STR = '\\"3'
raw_value.replace('\\"', IMPOSSIBLE_STR).strip('"').replace(IMPOSSIBLE_STR,'\\"')
Out[102]: 'Simon said: \\"Jump!\\"'
我认为\"
后面跟一个号码不太可能。
正则表达式可能会更好地解决问题,条件是您编写了正确的正则表达式!