我有一个字符串,其形式可以是:
s1 = "Hello HAHA"
s2 = '["Hello HAHA"]'
s3 = "{Hello HAHA}"
我想知道输入字符串是否类似于s1,s2或s3。我的动机是清理此输入并以s1
格式保存。
基本上我需要知道输入字符串是否为s1
形式。
我想到的解决方案:
json.loads(s)
并捕获异常以检查它是否是json {|}|[|]
,并替换它们。最强 pythonic 的方法是什么?
答案 0 :(得分:2)
使用strip
。 s.strip('[]"{}')
将删除字符串末尾的不需要的字符。
>>> unwanted = '[]"{}'
>>> 'Hello HAHA'.strip(unwanted)
'Hello HAHA'
>>> '["Hello HAHA"]'.strip(unwanted)
'Hello HAHA'
>>> '{Hello HAHA}'.strip(unwanted)
'Hello HAHA'
答案 1 :(得分:1)
您对JSON字符串的方法是correct。我会检查这样的列表:
>>> from ast import literal_eval
>>> def is_listliteral(x):
... try:
... return isinstance(literal_eval(x), list)
... except (SyntaxError, ValueError):
... return False
>>> is_listliteral('[')
False
>>> is_listliteral('[1,"2",{}]')
True
>>> is_listliteral('{}')
False
我确信您可以编写条件语句来检查JSON或列表,然后返回True
进行字符串检查,如果这两个都失败了。
编辑:有一个缺点:如果literal_eval
(字符串,数字,元组,列表,字符串,布尔值和None
)可以评估内部对象,则此解决方案仅适用于嵌套列表。
>>> is_listliteral('[1,2,{1,2,3}]')
False
所以它并不完美。对你的情况来说可能已经足够了。我现在还不知道更好的解决方案。
答案 2 :(得分:1)
正则表达式搜索输入字符串在起始位置和结束位置是否包含
{|}|[|]
,并替换它们。
re.sub(r'^\W+|\W+$', '', string)
或
re.sub(r'^[\[{"']+|['"}\]]+$', '', string)
这将删除开头或结尾处存在的一个或多个非单词字符。