Python将字符串拆分为两个包含十六进制字符串和常规字符串

时间:2016-01-08 17:29:49

标签: python python-2.7

我有一个包含\x ASCII十六进制字符串文字的python列表作为一些元素和常规字符串。有没有一种简单的方法可以将此列表拆分为两种不同类型的字符串?以下示例数据。

我已尝试在字符串中搜索\x子字符串,但无法正常工作。

['\xFF', '\x42', 'A', '\xDE', '@', '\x1F']

编辑: 目前正在使用Python 2.7.9

这是我到目前为止所尝试的

>>> list=['\xFF', '\x42', 'A', '\xDE', '@', '\x1F']
>>> print [s for s in list if '\x' in s]
ValueError: invalid \x escape
>>> print [s for s in list if '\\x' in s]
[]
>>> print [s for s in list if '\x' in s]
ValueError: invalid \x escape
>>> print [s for s in list if 'x' in s]
[]
>>> 

3 个答案:

答案 0 :(得分:3)

您可以将列表理解与re.search一起使用。例如,要获取所有单词字符的新列表:

import re
x = ['\xFF', '\x42', 'A', '\xDE', '@', '\1F']
print([i for i in x if re.search('\w',i)])

或者仅按ASCII范围中的特定字符进行拆分,例如:

print([i for i in x if re.search('[\x05-\x40]',i)])

我选择了上面的任意范围。

答案 1 :(得分:1)

您可以查看每个字符串的repr,以确定它是否包含\x

xs = ['\xFF', '\x42', 'A', '\xDE', '@', '\1F', 'hello\xffworld']  
hexes = []                                                        
others = []                                                       

for x in xs:                                                      
    if r'\x' in repr(x):                                      
        hexes.append(x)                                           
    else:                                                         
        others.append(x) 

print "hexes", hexes                                              
print "others", others                                            

输出:

hexes ['\xff', '\xde', '\x01F', 'hello\xffworld']
others ['B', 'A', '@']

答案 2 :(得分:0)

我将假设您将非十六进制数与十六进制值一起放入。如果您想要一个十进制数字字符串(例如' 25"被拒绝,您可以在将其标识为数字后检查十六进制指示符,如下所示。

似乎How do I check if a string is a number (float) in Python?中显示的代码可能是进行此测试的好方法。只需循环并根据测试结果将您的字符串放入正确的列表中。

同样的功能也显示在[检查Python字符串是否为数字](http://pythoncentral.io/how-to-check-if-a-string-is-a-number-in-python-including-unicode/}

不同之处在于第二组代码检查unicode以及常规字符串转换。

def is_number(s):
  try:
    float(s)
    return True
  except ValueError:
    pass

  try:
    import unicodedata
    unicodedata.numeric(s)
    return True
  except (TypeError, ValueError):
      pass

return False