我有一些txt文件,其中包含列表和字典的组合:
{"e":[[{"e":86,"c":23,"a":
{"a":[120,169,"green","red","orange"],"b":"red"},"g":"yellow","b":
["yellow"],"d":"red","f":-19},{"e":-47,"a":[2],"d":{"a":"violet"}}
我想找到此文件中的所有数字并获取其摘要。
我当时正在考虑也许通过使用for循环并查找int来遍历元素,但是它不起作用,因为“ for”将元素视为所有词典或该第一本词典中的列表,并且不会更深入地研究词典和列表。我不想完成程序,但也许可以找到一些线索来解决这个问题。
答案 0 :(得分:2)
您可以使用正则表达式查找所有数字,并将其存储在列表中,然后进行以下操作:
# read text from file
with open('somefile.txt', 'r') as f:
text = f.read()
import re
match = re.findall(r'-?\d+', text)
print(match)
输出:
['86', '23', '120', '169', '-19', '-47', '2']
解释正则表达式模式'-?\ d +':
'-?'文字可能带有符号
'\ d +'文本包含任意数量的相邻数字
修改:
如@arjoonn的评论中所述,上述模式可能会捕获文本中的数字,因此请避免使用以下示例为正则表达式模式添加条件:
import re
text = '2tex809t12 23 [4] -2'
match = re.findall(r'(?<!\w)-?\d+(?!\w)', text)
print(match)
输出:
['23', '4', '-2']
说明:
'(?!\w)'
被称为否定前瞻,这意味着匹配的文本不应包含数字后的任何字符
和'(?<!\w)'
与上面的相同,但是在后面(即之前)起否定作用