使用正则表达式的Python奇怪错误

时间:2015-08-09 03:48:48

标签: python regex

这是我的代码

>>> string="a 32GB  512MB "
>>> regex="(\d{1,4})(,|.){0,1}(\d{1,2}){0,1}\s*(KB|MB|GB)"
>>> import re
>>> res = re.findall(regex, string, re.IGNORECASE)
>>> print res
[('32', '', '', 'GB'), ('512', '', '', 'MB')]
>>> res=res[len(res)-1]
>>> print res
('512', '', '', 'MB')
>>> res="".join(res[0])
>>> print res
512

我无法理解为什么

res="".join(res[0])

返回512而不是512MB

3 个答案:

答案 0 :(得分:0)

您需要删除指定的索引索引,即[0],它仅获取第一个元素。

res = "".join(res)

如果将所有捕获组都转为非捕获组,则必须在不加入的情况下获得所需的输出。

regex = r"\b\d{1,4}[,.]?(?:\d{1,2})?\s*(?:KB|MB|GB)\b"

示例:

>>> import re
>>> string="a 32GB  512MB "
>>> res = re.findall(r"\b\d{1,4}[,.]?(?:\d{1,2})?\s*(?:KB|MB|GB)\b", string, re.I)
>>> res
['32GB', '512MB']
>>> res[-1]
'512MB'
>>> 

答案 1 :(得分:0)

res[0]是字符串'512'。由于字符串是可迭代的,因此可以对它们使用str.join。在这种情况下,您将使用空字符串连接每个字符,从而生成原始字符串。

您似乎想要加入整个元组:''.join(res)

答案 2 :(得分:0)

问题在于这个urs的陈述

res="".join(res[0])

这是因为你已经完成了

res=res[len(res)-1]

使res = ('512', '', '', 'MB')

您只需要join res而不是res[0],而res[0]将是512

你可以这样检查

string="a 32GB  512MB "
regex="(\d{1,4})(,|.){0,1}(\d{1,2}){0,1}\s*(KB|MB|GB)"
import re
res = re.findall(regex, string, re.IGNORECASE)

print "".join(res[0])
print "".join(res[1])