我有一个字符串,它的形式可以是:
s1 = "Hello HAHA"
s2 = '["Hello HAHA"]'
s3 = "{Hello HAHA}"我想知道输入字符串是否类似于s1、s2或s3。我的动机是清理这个输入并以s1格式保存它。
基本上,我需要知道输入字符串是否为s1格式。
我想过的解决办法:
json.loads(s)并捕获异常以检查它是否为json。{|}|[|]位于起始和结束位置,并替换它们。在这方面,最的方法是什么?
发布于 2016-02-24 08:31:44
使用strip。s.strip('[]"{}')将删除字符串末尾不需要的字符。
>>> unwanted = '[]"{}'
>>> 'Hello HAHA'.strip(unwanted)
'Hello HAHA'
>>> '["Hello HAHA"]'.strip(unwanted)
'Hello HAHA'
>>> '{Hello HAHA}'.strip(unwanted)
'Hello HAHA'发布于 2016-02-24 08:22:07
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或list,如果这两种方法都失败,则返回字符串检查的True。
编辑:有一个缺点:这个解决方案只适用于嵌套列表,前提是内部的对象可以通过literal_eval (字符串、数字、元组、列表、迪克、布尔和None)进行计算。
>>> is_listliteral('[1,2,{1,2,3}]')
False所以这并不完美。对你的案子来说可能足够了。我现在不知道更好的解决办法。
发布于 2016-02-24 08:44:27
Regex搜索以查看输入字符串中是否有
{|}|[|]位于起始和结束位置,并替换它们。
re.sub(r'^\W+|\W+$', '', string)或
re.sub(r'^[\[{"']+|['"}\]]+$', '', string)这将删除在开头或结尾存在的一个或多个非字字符。
https://stackoverflow.com/questions/35596597
复制相似问题