fix_release='Ubuntu 16.04 LTS'
p = re.compile(r'(Ubuntu)\b(\d+[.]\d+)\b')
fix_release = p.search(fix_release)
logger.info(fix_release) #fix_release is None
我想提取字符串' Ubuntu 16.04'
但是,结果是无......我怎样才能提取正确的句子?
答案 0 :(得分:1)
您将单词边界\b
与空格混淆,前者匹配单词字符和非单词字符之间的边界并消耗零字符,您只需使用r'Ubuntu \d+\.\d+'
作为您的情况:< / p>
fix_release='Ubuntu 16.04 LTS'
p = re.compile(r'Ubuntu \d+\.\d+')
p.search(fix_release).group(0)
# 'Ubuntu 16.04'
答案 1 :(得分:1)
试试这个正则表达式:
Ubuntu\s*\d+(?:\.\d+)?
<强>解释强>
Ubuntu
- 按字面意思匹配Ubuntu
\s*
- 尽可能多地匹配0+出现的空格\d+
- 尽可能多地匹配1位数(?:\.\d+)?
- 匹配.
后跟1位数字,尽可能多。最后?
使此部分可选。注意:在正则表达式中,您使用\b
作为空格。 \b
返回单词字符和非单词字符之间的0长度匹配。您可以使用\s
代替