这是我的代码
>>> 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
答案 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])