问题描述
我想在python中为以下行编写一个正则表达式,以grep相应的值:
establishmentCause mo-Signalling,
Freq = 6300
Radio Bearer ID = 0, Physical Cell ID = 396
在这里,我想获取每个标头的值,我使用下面的正则表达式来获取值,并且除“ Radio Bearer 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
重新启动引擎不会将匹配限制到,
而是继续。
1楼
量词*
是贪婪的。
您可以使用非贪婪版本*?
到之前尽量少匹配,
或串(的端\\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])
2楼
您可以使用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