Python正则表达式与“,”或字符串末尾不匹配

时间:2018-10-04 07:08:17

标签: python regex

我想在python中为以下几行写一个正则表达式,以grep相应的值:

establishmentCause mo-Signalling,
Freq = 6300
Radio Bearer ID = 0, Physical Cell ID = 396

在这里,我想获取每个标头的值,我正在使用下面的正则表达式来获取值,并且除“无线承载ID”之外的所有代码均能成功获取

pat = re.compile(r'%s\s[=\s]*\b(.*)\b(?:,|\Z)'%items[i])
value = pat.search(line)
print(value.group(1))

这将"Radio Bearer ID"的输出显示为0, Physical Cell ID = 396,其中我只需要0。即使我匹配,\Z时,有人可以告诉我我的正则表达式出了什么问题,重新引擎并没有将匹配限制到,,而是继续了。 >

2 个答案:

答案 0 :(得分:0)

量词*贪婪。您可以使用非贪婪版本*?,或字符串结尾(\Z)之前尽可能少地进行匹配:

pat = re.compile(r'%s\s[=\s]*\b(.*?)\b(?:,|\Z)'%items[i])

或者,您可以使用除,之外的字符类:

pat = re.compile(r'%s\s[=\s]*\b([^,]*)\b(?:,|\Z)'%items[i])

答案 1 :(得分:0)

您可以使用Lookbehind和Lookahead

例如:

import re

s = """establishmentCause mo-Signalling,
Freq = 6300
Radio Bearer ID = 0, Physical Cell ID = 396"""

pat = re.compile(r'(?<=Radio Bearer ID = )(.*)(?=,)')
value = pat.search(s)
print(value.group(1))

输出:

0