【问题标题】:Extracting multiple values after an exact string using regular expresions使用正则表达式在精确字符串后提取多个值
【发布时间】:2018-03-09 20:19:23
【问题描述】:

我有 100 个 .txt/.sed 文件,每个文件中有很多行。

示例输入文件:

Time: 10:34:51.49,15:21:39.24
Box Temperature (K): 32.82,8.88,-10.07
Silicon Temperature (K): 10.90,9.88
Voltage: 7.52,7.41
Dark Mode: AUTO,AUTO
Radiometric Calibration: RADIANCE
Units: W/m^2/sr/nm
GPS Time: n/a
Satellites: n/a
Channels: 1024

期望的输出:

Time             15:21:39.24
Box Temp         32.82
                  8.88
                -10.07
Si Temp          10.90
                  9.88

我试图编写代码来识别字符串,然后列出值,然后将它们排列到 DataFrame 中,然后将它们写入 .csv 文件。 示例代码

testtxt = 'Temperature (K): 32.82,8.88,-10.07,32.66,8.94,-10.07'
exp = r'^Temperature (K):(\s*) ([0-9.]+)([0-9.]+), ([0-9.-]+) , (-[0-9-.]+),([0-9-.]+) , ([0-9-.]+),(-[0-9-.]+)'
regexp = re.compile(exp)
my_temp = regexp.search(txt)
print(my_temp.group(0))

错误:

AttributeError: 'NoneType' object has no attribute 'group'

基本上,它找不到匹配项!

澄清:我想要一种有效的方法来仅提取时间和温度值,而不是其他值。一旦找到文件就能够停止扫描文件会很棒,因为每个文件都有超过 500 行,而且我有很多。

【问题讨论】:

  • 时间的规则是什么?
  • 尝试使用 .split() 方法来获得您想要的结果。用“,”分割每个字符串,因为您想要的每个结果都用逗号分隔。
  • @RohanB 我对正则表达式真的很陌生,你能举个例子来说明你在说什么吗?现在不是把表达式中的逗号当作字面意思了吗?
  • @Jan 我尝试在 MATLAB 中这样做,所以语法可能有点不同,而且它的效率非常低 atm: 'expr = '(?(.*))'; '
  • @Brain_overflowed 对不起,我不能举一个很好的例子,因为我也不太擅长正则表达式。

标签: python regex python-3.x search match


【解决方案1】:

我的建议是使用 string.startswith() 来确定字符串是否以“Box Temperature (K)”或其他开头。找到后,获取字符串的其余部分,将其解析为 CSV,然后验证每个组件。试图用正则表达式来做这一切,麻烦多于它的价值。

如果您想让代码在找到所有内容后停止,只需为您要查找的内容设置标志,一旦设置了所有标志,您就可以退出。比如:

foundTime = 0
foundBoxTemp = 0
foundSiTemp = 0
while (not end of file AND (foundTime == 0 || foundBoxTemp == 0 || foundSiTemp == 0))
    if (line.startswith("Box Temperature (K):"))
        // parse and output
    else if (line.startswith("Time:"))
        // parse and output
    else ....

【讨论】:

  • 您对如何在列表表单中添加每个值有什么建议吗?
  • 关键是能够提取这些值,所以抱歉伪代码并没有真正的帮助。我理解逻辑,由于是新的,所以在实施中遇到了麻烦
猜你喜欢
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多