在在线测试器中测试正则表达式代码有效,但是在Python中使用时则无效。我是新手!任何帮助将不胜感激
我正在尝试使用非捕获组搜索字符串。
我正在使用这个:
z = re.findall(\d+.\d (?:dBmV), data1)
此:
\d+.\d dBmV
几乎可以带我到那里,但我不希望dBmV
在此处查找dbmv值:
Rx 6 Link Signal Power 2.5 dBmV
Rx 6 Link SNR 42.5 dB
Rx 7 Link Freq 407 MHz
Rx 7 Link Signal Power 2.5 dBmV
Rx 7 Link SNR 42.5 dB
我只想要值,没有文本。我可以得到
[2.5 dBmV, 2.5 dBmV, ...] or []
在findall
的第二个开括号中出现错误:
z = re.findall(\d+.\d (?:dBmV), data1)
SyntaxError:换行符后出现意外字符
谢谢
答案 0 :(得分:0)
正则表达式在传递给r
时,必须放在引号内,并在findall
之前。
另外,使用正向搜索?=
而不是非捕获组?:
捕获dBmV
之前的号码。
data1 = "Rx 6 Link Signal Power 2.5 dBmV Rx 6 Link SNR 42.5 dB Rx 7 Link Freq 407 MHz Rx 7 Link Signal Power 2.5 dBmV Rx 7 Link SNR 42.5 dB"
print(re.findall(r"\d+.\d(?=\sdBmV)", data1))
输出:
['2.5', '2.5']
答案 1 :(得分:0)
您似乎在示例代码中缺少引号。您需要用单个''
或两个""
引号引起来。
另外,考虑将(?:dBmV)
移到捕获组之外,以使其更易于阅读。
这应该产生想要的结果:
s = 'Rx 6 Link Signal Power 2.5 dBmV Rx 6 Link SNR 42.5 dB Rx 7 Link Freq 407 MHz Rx 7 Link Signal Power 2.5 dBmV Rx 7 Link SNR 42.5 dB'
z = re.findall('(\d+\.\d+)(?: dBmV)', s)
print(z)
结果:
['2.5', '2.5']