Python将字符串列表拆分为两个,其中包含十六进制字符串和正则字符串

Python将字符串列表拆分为两个,其中包含十六进制字符串和正则字符串,python,python-2.7,Python,Python 2.7,我有一个python列表,其中包含\xASCII十六进制字符串文本作为一些元素,并带有常规字符串。有没有一种简单的方法可以将此列表拆分为两种不同类型的字符串?下面是示例数据 我已尝试在字符串中搜索\x子字符串,但该子字符串无法正常工作 ['\xFF','\x42','A','\xDE','@','\x1F'] 编辑: 当前正在使用Python 2.7.9 这就是我迄今为止所尝试的 >>> list=['\xFF', '\x42', 'A', '\xDE', '@', '\x1F

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

我已尝试在字符串中搜索
\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]
[]
>>> 

您可以将列表理解与搜索结合使用。例如,要获取所有单词字符的新列表,请执行以下操作:

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)])

我在上面选择了一个任意范围。

您可以使用列表理解和重新搜索。例如,要获取所有单词字符的新列表,请执行以下操作:

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)])

我在上面选择了一个任意范围。

您可以查看每个字符串的
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', '@']

您可以查看每个字符串的
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', '@']

我假设你们会把非十六进制数和十六进制值放在一起。如果希望拒绝十进制数字字符串(如“25”),则可以在将其标识为数字后检查十六进制指示符,如下所示

看起来,中显示的代码可能是进行此测试的一种好方法。只需循环并根据测试结果将字符串放入适当的列表中

同样的函数也显示在[检查Python字符串是否是数字](}

区别在于第二组代码检查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

我将假设您将非十六进制数字与十六进制值放在一起。如果您希望拒绝十进制数字字符串(如“25”),您可以在将其标识为数字后检查十六进制指示符,如下所示

看起来,中显示的代码可能是进行此测试的一种好方法。只需循环并根据测试结果将字符串放入适当的列表中

同样的函数也显示在[检查Python字符串是否是数字](}

区别在于第二组代码检查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

@上面编辑的IronFist包含版本:2.7.9它是如何“工作不正常”的?您无法使其工作?或者您可以,但仅此测试不足以将十六进制与其他条目区分开来?您是否试图在此处将unicode字符与字符串分开?上面编辑的IronFist包含版本:2.7.9它是如何“工作不正常”的?您无法使其工作?或者您可以,但仅此测试还不足以将十六进制与其他条目区分开来?您是否正在尝试将unicode字符与字符串分隔开?这对于像
'hello\xfworld'
@WayneWerner这样的东西不起作用-好的,我们可以在
中使用
。这对类似的东西不起作用
'hello\xfworld'
@WayneWerner-好的,我们可以在
中使用
。哎呀,我的范围缺少括号。修复了。哎呀,我的范围缺少括号。修复了。