Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python regexp具有分组的多个表达式_Python_Regex - Fatal编程技术网

Python regexp具有分组的多个表达式

Python regexp具有分组的多个表达式,python,regex,Python,Regex,当被问及网络信息时,我试图匹配调制解调器给出的输出,结果如下: 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和非BCCH。以

当被问及网络信息时,我试图匹配调制解调器给出的输出,结果如下:

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和非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个,这一事实不会改变这一事实。根据您匹配的行,其中2个或3个组将为空


如果必须用一个表达式匹配任意一行,则无法解决此问题。您可以使用命名组(并返回匹配组的字典)使其更易于管理,但最终将得到空组。

捕获组就是这样工作的。因为你有五个零件,所以总会有五个零件被退回

根据您的数据,我认为您可以通过将
bsic
部分设置为可选部分来简化正则表达式。这样,每行将返回三个部分,对于非BCCH载波,中间一个为空

match = re.findall('arfcn: (\d*)(?:,bsic: (\d*))?,dBm: (-\d*)', data)

这样做成功了,现在很容易测试该组是BCCH还是非BBCH运营商。谢谢