首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用regexp匹配组时避免“双重搜索”

使用regexp匹配组时避免“双重搜索”
EN

Stack Overflow用户
提问于 2015-05-22 21:00:39
回答 1查看 31关注 0票数 2

有没有更有效的方法来做到这一点:

代码语言:javascript
复制
if re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line):
    m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line)
    self.capacity = convert_to_bytes(m.group("units"), m.group("value"))

就像在C和其他语言中一样,你可以这样做,并避免执行两次搜索:

代码语言:javascript
复制
if m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line):
    self.capacity = convert_to_bytes(m.group("units"), m.group("value"))

这是一种更好的方法吗?

代码语言:javascript
复制
m = re.search("(?P<value>[0-9]*[.][0-9]*) (?P<units>KB|MB|GB|TB|PB)", line)

if m:
    self.capacity = convert_to_bytes(m.group("units"), m.group("value"))
EN

回答 1

Stack Overflow用户

发布于 2015-05-23 00:03:58

正如@Christian Aichinger所说,这是正确的方式,但我会稍微修剪一下正则表达式:

代码语言:javascript
复制
m = re.search("(?i)(?P<value>[0-9]+(?:\\.[0-9]+)?) (?P<units>KB|MB|GB|TB|PB)", line)
if m:
    self.capacity = convert_to_bytes(m.group("units"), m.group("value"))

现在,[0-9]+(?:\\.[0-9]+)?将匹配它后面的一些数字和可选的小数。请记住,如果您有其他小数点分隔符,或者如果您想包含一个千位分组符号,您最好使用[0-9]+(?:[., ][0-9]+)?这样的字符类(在俄语或波兰语中,空格是一个有效的千位分组符号)。

此外,使正则表达式模式不区分大小写也是一个好主意,这样它也可以与1,000 kb匹配。

Sample code

代码语言:javascript
复制
import re
line = "1.56 kb"
m = re.search("(?i)(?P<value>[0-9]+(?:\\.[0-9]+)?) (?P<units>KB|MB|GB|TB|PB)", line)
if m:
    print m.group("units") + " - " + m.group("value")

输出:

代码语言:javascript
复制
kb - 1.56
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30397404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档