正则表达式搜索-适用于测试仪,不适用于Spyder

时间:2019-04-02 06:17:23

标签: python regex

在在线测试器中测试正则表达式代码有效,但是在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:换行符后出现意外字符

谢谢

2 个答案:

答案 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']