如何在字符串中提取117,0.049,207?
particulate 117㎍/㎥bad(81~150),ozone 0.049ppmaverage(0.041~0.080),overall air quality 207bad(151~250)
答案 0 :(得分:1)
解析非结构化文本很麻烦:您可以使用正则表达式快速获得结果,如下所示:
input='particulate 117㎍/㎥bad(81~150),ozone 0.049ppmaverage(0.041~0.080),overall air quality 207bad(151~250)'
import re
input=re.sub(r'\(.*?\)','',input)
results=re.findall(r'[\d.]+',input)
print(results) # this prints ['117', '0.049', '207']
...但总是得到你想要的结果可能很困难。
让我们一步一步地讨论解决方案......
首先,您的输入包含括号内的数字 - 您不需要它们。因此,我们首先需要使用正则表达式替换删除括号:
input=re.sub(r'\(.*?\)','',input)
# now input is:
# particulate 117㎍/㎥bad,ozone 0.049ppmaverage,overall air quality 207bad
此替换搜索以开括号'('以及以右括号结尾')开头的子字符串,并用空字符串替换它们。在编写此表达式时,我们需要考虑一些细节:
作为第二步,我们想从剩余的输入中挑选出数字。您的数字可能包含小数点,因此我们需要在正则表达式中允许这一点。但是将数字精确地与正则表达式匹配是很棘手的。以下是我们的解决方案无法获取的有效数字(对于某些有效的定义):
-1.32 1.04e4 -3.14e-23
这是一个字符串,我们的模式作为数字选择---但你可能不需要它们:
10.24.12.123
所有这些都可以修复---但模式会更复杂。而且你必须准确地决定你想要得到什么以及你不想得到什么。