python - 在 Python 中识别某些字符串的最佳方法

标签 python regex string

我正在编写一个系统来读取来自跟踪卡车的设备的数据。

本系统会接收到不同类型设备的信息,因此接收到的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/

相关文章:

python - while 循环用户输入?

php - 如何使用正则表达式删除方括号和它们之间的任何内容?

java - 从回调中返回字符串 - Java

objective-c - 在 NSMutableArray : Why it doesn't work? 中获取字符串

python - Python粘贴脚本与大模板文件一起崩溃?

python - Python-如何与另一个脚本共享实时数据

python - 查找字符串的所有出现位置,除非在另一个模式中找到该字符串

regex - 将正则表达式从JS风格转换为Golang风格?

javascript - 以指定格式输出日期字符串

python - 将颜色条移近热图(Seaborn)