正则表达式搜索 - 在测试人员中工作,而不是在Spyder中[重复]

问题描述 投票:-1回答:2

测试在线测试程序中的正则表达式代码是有效的,但在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:行继续符后面的意外字符

谢谢

python regex
2个回答
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']

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']
© www.soinside.com 2019 - 2024. All rights reserved.