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

时间:2014-10-21 11:13:35

标签: python regex expression

所以我的问题是我从串口接收值。 这些值可以是任何流动的。

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

他们在输出中是次要的,但最大的区别是第二行的值是D00而不是S0

因此,此序列输出将更新传感器,D00用于数字输出,但S0用于风扇速度。

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

我希望能够编写它,所以如果它没有S0值,那么它会寻找D00值。

感谢您的任何帮助或提前建议。我不知道我应该在哪里看,或者我应该采取什么方向。

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

以下代码是PYTHON

import serial,string,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

1 个答案:

答案 0 :(得分:0)

如果我的解释是对的,请看一下。这是一个起点,然后你必须将你的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)