这个问题在这里已有答案:
测试在线测试程序中的正则表达式代码是有效的,但在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:行继续符后面的意外字符
谢谢
正则表达式需要在引号内,并在传递给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']
看起来您的示例代码中缺少引号。你需要用单个''
或双""
引用字符包围你的模式。
另外,考虑将(?: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']