我正在编写一个系统来读取来自跟踪卡车的设备的数据。
本系统会接收到不同类型设备的信息,因此接收到的trace字符串也会不同,从而推导出设备型号。
因此,我需要了解如何识别这些字符串以对其进行正确处理。例如,其中一个单元发送以下字符串:
[0,0,13825,355255057406002,0,250814,142421,-2197354498319328,-4743040708824992,800,9200,0,0,0,0,0,12,0,31,0,107]
另一个设备,字符串是这样来的:
SA200STT;459055;209;20140806;23:18:28;20702;-22.899244;-047.047640;000.044;000.00;11;1;68548721;12.60;100000;2;0016
所以我的问题是,识别每个字符串的最佳方法是什么?
最佳答案
第一步是确定每种格式的独特之处。在您给出的示例中,第一个字符串以 [] 开头和结尾,第二个版本以序列“SA200STT”开头。因此,第一个近似值是匹配:
import re
def identify(s):
if re.match(r'^\[.*\]$', s):
return "type 1"
elif re.match(r'^SA200STT.*$', s):
return "type 2"
else:
return "unknown"
s1 = r'[0,0,13825,355255057406002,0,250814,142421,-2197354498319328,-4743040708824992,800,9200,0,0,0,0,0,12,0,31,0,107]'
s2 = r'SA200STT;459055;209;20140806;23:18:28;20702;-22.899244;-047.047640;000.044;000.00;11;1;68548721;12.60;100000;2;0016'
print "s1:", identify(s1)
print "s2:", identify(s2)
当我运行上面的命令时,我得到:
s1: type 1
s2: type 2
我怀疑这不是您需要的实际算法,但这是一般的想法。弄清楚如何区分每种格式,然后创建一个表达式来检测这种格式。
关于使用正则表达式的注意事项:
正则表达式可能很慢,如果可以避免,通常应该避免使用(不仅是为了速度问题,还因为它们会使您的代码难以理解)。如果性能或可读性是一个问题,请考虑替代解决方案,例如比较前 N 个字符或最后 N 个字符。
关于python - 在 Python 中识别某些字符串的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25491219/