当被问及网络信息时,我试图匹配调制解调器给出的输出,结果如下:
Network survey started...
For BCCH-Carrier:
arfcn: 15,bsic: 4,dBm: -68
For non BCCH-Carrier:
arfcn: 10,dBm: -72
arfcn: 6,dBm: -78
arfcn: 11,dBm: -81
arfcn: 14,dBm: -83
arfcn: 16,dBm: -83
所以我有两种表达式要匹配,BCCH和non-BCCH。以下代码几乎可以正常工作:
match = re.findall('(?:arfcn: (\d*),dBm: (-\d*))|(?:arfcn: (\d*),bsic: (\d*),dBm: (-\d*))', data)
但似乎两个表达式都是匹配的,没有找到空白字段:
>>> match
[('', '', '15', '4', '-68'), ('10', '-72', '', '', ''), ('6', '-78', '', '', ''), ('11', '-81', '', '', ''), ('14', '-83', '', '', ''), ('16', '-83', '', '', '')]
有人能帮忙吗?为什么会有这样的行为?我试过改变表达的顺序,但没有成功。你知道吗
谢谢!你知道吗
有一个包含5个组的表达式。你知道吗
在表达式的一个可选部分中有2个,而在另一个互斥部分中有3个,这一事实并没有改变这个事实。两组或三组中的任何一组都将是空的,这取决于您匹配的行。你知道吗
如果你必须用一个表达式来匹配任何一行,这是没有办法的。您可以使用命名组(并返回匹配组的字典)使其更易于管理,但最终总是会得到空组。你知道吗
这就是捕获组的工作方式。因为你有五个,所以总会有五个零件被退回。你知道吗
基于您的数据,我认为您可以通过使
bsic
部分成为可选的来简化regex。这样,每一行将返回三个部分,中间一个对于非BCCH载波是空的。你知道吗相关问题 更多 >
编程相关推荐