这似乎很适合正则表达式,但让我们先谈谈如何限制搜索空间,这样您就不必使用正则表达式。在您开始之前,尽管您需要确保您的要求是可能的 - 看起来您希望将 16 与存储匹配,将 12 与屏幕尺寸匹配,而最后不需要 GB 或英寸,这意味着您需要找到一些方法来区分这些数字。以下是有关如何进行这些限制的一些想法:
存储:这很可能是 2 的幂,(8, 16, 32, 64...) 所以你只需要检查字符串中是否有 2 的幂:
[storage in "iPhone 5s 16 GB" for storage in ["8", "16", "32", "64"]]
会返回给你[False, True, False, False],告诉你那里有一个 16。
显示:同样,这些可能受到很大限制 - 正如您所说,12、13 等。您可能会使用类似于我上面的存储技巧的东西而忽略试图找到英寸。
品牌、型号:这些应该非常简单——再次列出您要搜索的品牌,然后进行上面的列表理解。
如果这不起作用,您可以尝试正则表达式。它们比它们的价值更复杂,通常也更麻烦——它们很难阅读、维护,而且我经常被它们咬伤。然而:
python 中的正则表达式(?i)[0-9]+(\s|)GB将不区分大小写 ( (?i)) 搜索包含多个数字 0-9 ( [0-9]+)、零个或多个空格 ( \s*) 以及字母 GB ( GB) 之一的字符串。GB 将匹配大写或小写,因为(?i)选项是开头。打电话
re.search('(?i)[0-9]+\s*GB', "Apple iPhone 5s (Space Grey, 16GB)")
将返回一个匹配对象,为您提供匹配的字符串。
我发现正则表达式非常复杂,所以一般使用一个有用的网站来至少在我编码它们之前尝试捕获错误。