Python将字符串列表拆分为两个,其中包含十六进制字符串和正则字符串
我有一个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
\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-好的,我们可以在
中使用。哎呀,我的范围缺少括号。修复了。哎呀,我的范围缺少括号。修复了。