在python中只剥离一次字符

时间:2017-11-07 14:28:03

标签: python string strip

我正在解析文件中的值,其中一些可以是字符串文字,用双引号括起来。要获得实际值,我必须删除双引号:

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

1 个答案:

答案 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!\\"'

我认为\"后面跟一个号码不太可能。

正则表达式可能会更好地解决问题,条件是您编写了正确的正则表达式!