尝试从文本中提取一些数字

时间:2019-04-18 19:28:27

标签: python regex

我的文字与此格式相似

“体重”,“ 156.5”,“身高”,“ 6.3”,“最大”,“ 146”

“体重”,“ 136.3”,“身高”,“ 5.1”,“最大”,“ 205” ........

我的目标是按组提取这些数字,以便第一列的重量,第二列的高度,第三列的最大值,依此类推。

到目前为止,我已经设法使用以下方法获取体重数字:

weight = re.findall(r'^ \ D *(\ d +。\ d +)',文本,re.IGNORECASE | re.MULTILINE)

是否可以在特定单词后解析数字?

我发现了类似的问题,但是尝试了一下,但没有用,现在再也想不出其他任何事情了。

3 个答案:

答案 0 :(得分:0)

首先,我不太喜欢输入的方式。斯科特(Scott)的评论是正确的,因为它应该以不同的方式解析。但是抛开这些,我们可以尝试解决问题:您可能想在正则表达式中使用积极的表情。在您的情况下,鉴于某个单词刚好出现在它之前,我们可以使用它来匹配文本的特定部分。您可以在后面加上(?<= texthere),然后加上原始正则表达式字符串。

如果我们想找到所有重量值:

import re

sample_inputs = ['"weight","156.5","height","6.3","max","146"',
                 '"weight","122.1","height","4.1","max","116"']

search_string = r"(?<=\"weight\",) *\"*(\d+.\d+)"
compiled_string = re.compile(search_string)

results = []
for sample_input in sample_inputs:
    results.append(re.findall(compiled_string, sample_input))

print(results) # >>> [['156.5'], ['122,1']]

搜索字符串的说明:

(?<=\"weight\",)是一个积极的后盾,它将搜索"weight",(包括引号)

*\"*(\d+.\d+)将在0到无限制的空格之间找到一个引号(您的号码的开头引号),然后与第1组中的实际号码匹配。

答案 1 :(得分:-1)

考虑使用pandas软件包,尤其是pandas.read_csv()。使生活变得轻松。

答案 2 :(得分:-1)

执行此操作的一种简单方法是对列表的每个元素进行迭代并使用:

try:
    # What you want to try
except:
    # if error

您将获得该行中的每个数字。但是,也许您可​​以使用库来解析文件。您的生活会更轻松