用于多个字符串值的python正则表达式

用于多个字符串值的python正则表达式,python,regex,expression,Python,Regex,Expression,所以我的问题是,我从一个串行端口接收值。 这些值可以是任何一个流 基地雷达:新,ATC001T1412010472R-77,ATC005:T1412010460R-70,SU0003;Q6V8.9S0C11.5*xx 基地雷达:新,ATC001T1413824282R-102,ATC003:T1413824274R-98,SU001G;Q0V14.0D00*x 它们在输出中的变化很小,但最大的区别是第二行的值是D00而不是S0 因此,此串行输出将根据传感器的变化更新me,D00用于数字输出,而S

所以我的问题是,我从一个串行端口接收值。 这些值可以是任何一个流

基地雷达:新,ATC001T1412010472R-77,ATC005:T1412010460R-70,SU0003;Q6V8.9S0C11.5*xx 基地雷达:新,ATC001T1413824282R-102,ATC003:T1413824274R-98,SU001G;Q0V14.0D00*x

它们在输出中的变化很小,但最大的区别是第二行的值是D00而不是S0

因此,此串行输出将根据传感器的变化更新me,D00用于数字输出,而S0用于风扇转速

所以我的问题是,如果我收到第一个串行输出的S0值,我已经写了一个正则表达式,但是如果我收到D00,正则表达式将中断

我希望能够编写它,这样如果它没有S0值,它就会转而查找D00值

感谢您事先提供的任何帮助或建议。我不确定我应该去哪里,或者我应该走什么方向

下面的代码检查串行输出,然后运行正则表达式,如果找到匹配项,则将其插入数据库

下面的代码是PYTHON

导入序列、字符串、MySQLdb、re

db = MySQLdb.connect(host="localhost", user="root", passwd="", db="walnut_farm")
cur = db.cursor() 

serialPort = 'COM4' # BAUD Rate is 9600 as default
ser = serial.Serial()
ser.setPort(serialPort)
#ser.setBaudrate(115200) Enable if BAUD is not deault value 

try:
    ser.open()
except: 
    print('Port Error!')

else:
    while True:
        try:
            ardString = ser.readline()
            Serial_Output = ardString

            p = re.compile(ur'^BASE_RAD: NEW,(.*)#T(\d*)R-(\d*),(.*):T(\d*)R-(\d*),(.*);Q(\d*)V(\d*\.?\d*)S(\d*)C(\d*\.?\d*)(.*)') # here is the regular expressions i created from this link http://regex101.com/r/dP6fE1/1

            Serial_Results = re.match(p, Serial_Output)


            # Assigning variables to the array values
            Base_ID = Serial_Results.group(1)
            Base_Time_Stamp = Serial_Results.group(2)
            Base_Signal = Serial_Results.group(3)
            Repeater_ID = Serial_Results.group(4)
            Repeater_Time_Stamp = Serial_Results.group(5)
            Repeater_Signal = Serial_Results.group(6)
            Sensor_ID = Serial_Results.group(7)
            Sensor_Sequence = Serial_Results.group(8)
            Sensor_Input_Voltage = Serial_Results.group(9)
            Sensor_Wind_Speed = Serial_Results.group(10)
            Sensor_Temperature = Serial_Results.group(11)
            Checksum = Serial_Results.group(12)

            # Execute the SQL query to INSERT the above variables into the Database
            cur.execute('INSERT INTO serial_values (Base_ID, Base_Time_Stamp, Base_Signal, Repeater_ID, Repeater_Time_Stamp, Repeater_Signal, Sensor_ID, Sensor_Sequence,  Sensor_Input_Voltage, Sensor_Wind_Speed, Sensor_Temperature, Checksum) VALUES ("'+Base_ID+'", "'+Base_Time_Stamp+'", "'+Base_Signal+'", "'+Repeater_ID+'", "'+Repeater_Time_Stamp+'", "'+Repeater_Signal+'", "'+Sensor_ID+'", "'+Sensor_Sequence+'",  "'+Sensor_Input_Voltage+'", "'+Sensor_Wind_Speed+'", "'+Sensor_Temperature+'", "'+Checksum+'")')

            db.commit()
            #ser.close()

        except Exception:
            pass

看看这个,如果我的解释是正确的。这是一个起点,然后必须将mysql插入到数据库中

import re

def get_output_parameters(serial_output):
    p = re.compile(ur'^BASE_RAD: NEW,(.*)#T(\d*)R-(\d*),(.*):T(\d*)R-(\d*),(.*);Q(\d*)V(\d*\.?\d*)S(\d*)C(\d*\.?\d*)(.*)') # here is the regular expressions i created from this link http://regex101.com/r/dP6fE1/1
    p2 = re.compile(ur'^BASE_RAD: NEW,(.*)#T(\d*)R-(\d*),(.*):T(\d*)R-(\d*),(.*);Q(\d*)V(\d*\.?\d*)D(\d*)(.*)')

    Serial_Results = re.match(p, serial_output)
    digital_out = False
    if not Serial_Results:
        Serial_Results = re.match(p2, serial_output)
        digital_out = True

    # Assigning variables to the array values
    Base_ID = Serial_Results.group(1)
    Base_Time_Stamp = Serial_Results.group(2)
    Base_Signal = Serial_Results.group(3)
    Repeater_ID = Serial_Results.group(4)
    Repeater_Time_Stamp = Serial_Results.group(5)
    Repeater_Signal = Serial_Results.group(6)
    Sensor_ID = Serial_Results.group(7)
    Sensor_Sequence = Serial_Results.group(8)
    Sensor_Input_Voltage = Serial_Results.group(9)
    Sensor_Wind_Speed = Serial_Results.group(10)
    Sensor_Temperature = Serial_Results.group(11)
    if not digital_out:
        Checksum = Serial_Results.group(12)

    print Sensor_Temperature


Serial_Output = "BASE_RAD: NEW,ATC001#T1412010472R-77,ATC005:T1412010460R-70,SU0003;Q6V8.9S0C11.5*xx"
Serial_Output2 = "BASE_RAD: NEW,ATC001#T1413824282R-102,ATC003:T1413824274R-98,SU001G;Q0V14.0D00*x"

get_output_parameters(Serial_Output)
get_output_parameters(Serial_Output2)

如果下面的答案有帮助,你应该这样做。