【问题标题】:python regex read raw UDP data into 3d pointpython 正则表达式将原始 UDP 数据读入 3d 点
【发布时间】:2017-10-13 21:04:53
【问题描述】:

目前我正在从一个如下所示的 UDP 客户端读取数据:

X,-3.6958579946845745e+001,Y,-1.6998436983768425e+001,Z,-8.2843220475401704e+000
X,-3.6958578049325865e+001,Y,-1.6998421509164846e+001,Z,-8.2843157671767944e+000
X,-3.6958558150477288e+001,Y,-1.6998528495040631e+001,Z,-8.2843652460239454e+000

我已经设置了一个读取原始数据的服务器,然后我需要将数据解析为 3 个单独的值。

import socket

UDP_IP_ADDRESS = ''
UDP_PORT_NO = 5005

serverSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
serverSock.bind((UDP_IP_ADDRESS, UDP_PORT_NO))

while True:
    data, addr = serverSock.recvfrom(4096)
    x,y,z = parse_data(raw_data) #parse into 3 distinct values

我坚持的部分实际上是定义parse_data() 函数。我只熟悉逗号分隔或空格分隔行的简单解析。我尝试使用txt2re,但无法理解我需要创建的正则表达式。

使用regular expressions 的已定义parse_data() 函数似乎也适合这里,因为它能够提供低延迟。一个快速的班轮会非常有帮助。

【问题讨论】:

  • 您需要将完整的数字捕获为单个字符串值(例如-3.6958579946845745e+001)还是需要单独捕获幅度(例如xValue = -3.6958579946845745xMagnitude = 1)?

标签: python regex parsing point


【解决方案1】:

既然你要求单线:

x, y, z = map(float, raw_data.split(',')[1::2])

【讨论】:

    猜你喜欢
    • 2014-08-22
    • 2021-10-02
    • 1970-01-01
    • 2015-07-21
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    相关资源
    最近更新 更多