gpt4 book ai didi

regex - Perl Regex 抓取不规则串口输出数据

转载 作者:行者123 更新时间:2023-12-04 19:35:20 25 4
gpt4 key购买 nike

简要概述...我在家里有一个油箱监视器,它通过串行端口输出数据,包括油箱中的油位。在大多数情况下,输出是一致的,但在整点和随机“特殊事件”中,它发送的内容略有不同。

这是从端口、换行符等处转储的示例。

20:23,Ull=000
20:24,Ull=000

RX:033 CMs,048 *F
20:25,Ull=000
20:26,Ull=000
20:29,Ull=000
RX:033 CMs,051 *F (Fast)
Chosen:0,Hour:10,033 CMs,051 *F

RX:033 CMs,051 *F (Fast)
Chosen:0,Hour:10,033 CMs,051 *F
20:34,ull=000

我想从此输出中提取的是“ull=”之后的数字,在本例中为 000,但该数字始终是一个 3 位整数,并且始终以 0 开头,即。 '033' 或 '001' 或 '259'

当它不以 'HH:MM,ull=nnn' 格式发送时,可以忽略输出,因为它最多只持续 10 分钟,然后再次返回标准输出

使用我的电力监视器的模板,它在类似的基础上工作,但我想出了更一致的输出...

#!/usr/bin/perl -w

# Read data from oil tank sensor via USB-serial port.

use strict;
use Device::SerialPort qw( :PARAM :STAT 0.07 );
use WWW::Mechanize;

open STDERR, '>/dev/null';

my $PORT = "/dev/ttyUSB2";
my $ob = Device::SerialPort->new($PORT);
$ob->baudrate(115200);
$ob->write_settings;

open(SERIAL, "+>$PORT");
while (my $line = <SERIAL>) {
if ($line =~ m!ull=(\d+)!) { # trying and failing to extract the data on this line

my $oil = $1*1234; # once the value is successfully captured I'll process
# it and send it for viewing & storage on the internet.


#send the oil volume value to emoncms (this section works ok.)
my $ua = WWW::Mechanize->new();
my $url = "http://emoncms.org/input/post?json={oil:$oil}&apikey=MY API KEY";
my $response = $ua->get($url);

}

}

这只是一直在后台运行。

我认为可能是字符串中的“,”或“=”让我感到困惑,因为我可以将字符串的其他随机部分放入变量中,但从来没有我需要的值。任何帮助将不胜感激,因为我似乎使用了我能想到的所有随机符号组合 {} * .!m\//g/\n !等等...还有什么都没用!!

目前这是一种实验,因为我什至不能 100% 确定“ull”值是多少,但我希望它是从传感器到油箱中油表面的距离!时间会证明一切。

最佳答案

那是因为您试图将您的正则表达式与完整的字符串匹配,但事实并非如此。因为 ull=(\d+) 不会匹配包含该模式的长字符串。它只会匹配与该模式完全匹配的字符串。

此外,如果您的数字肯定是 length 3,那么您可以在正则表达式中明确指定。您在那里不需要 + 量词。而是一个 {3} 量词,或 0\d{2} 因为您的号码以 0 开头。并添加一个 i 标记,用于以不区分大小写 的方式进行匹配。

尝试使用这个:-

if ($line =~ m!.*?ull=(0\d{2}).*!i)

关于regex - Perl Regex 抓取不规则串口输出数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13480287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com