检查字符串是否不是python

时间:2016-02-24 08:11:51

标签: python regex string

我有一个字符串,其形式可以是:

s1 = "Hello HAHA"
s2 = '["Hello HAHA"]'
s3 = "{Hello HAHA}"

我想知道输入字符串是否类似于s1,s2或s3。我的动机是清理此输入并以s1格式保存。

基本上我需要知道输入字符串是否为s1形式。

我想到的解决方案:

  1. json.loads(s)并捕获异常以检查它是否是json
  2. 正则表达式搜索输入字符串在起始和结束位置是否包含{|}|[|],并替换它们。
  3. 最强 pythonic 的方法是什么?

3 个答案:

答案 0 :(得分:2)

使用strips.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)

这将删除开头或结尾处存在的一个或多个非单词字符。