我的文字与此格式相似
“体重”,“ 156.5”,“身高”,“ 6.3”,“最大”,“ 146”
“体重”,“ 136.3”,“身高”,“ 5.1”,“最大”,“ 205” ........
我的目标是按组提取这些数字,以便第一列的重量,第二列的高度,第三列的最大值,依此类推。到目前为止,我已经设法使用以下方法获取体重数字:
weight = re.findall(r'^ \ D *(\ d +。\ d +)',文本,re.IGNORECASE | re.MULTILINE)
是否可以在特定单词后解析数字?
我发现了类似的问题,但是尝试了一下,但没有用,现在再也想不出其他任何事情了。
答案 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
您将获得该行中的每个数字。但是,也许您可以使用库来解析文件。您的生活会更轻松