【问题标题】:Return the amount of floating points in a line (Python 3.4)返回一行中的浮点数(Python 3.4)
【发布时间】:2015-03-09 14:49:38
【问题描述】:

我是编程新手,但对于我认为不难的事情找不到答案。 对于一个项目,我必须从指定如下的文件中提取 RGB 值:

#98=IFCCOLOURRGB($,0.26,0.22,0.18);

到目前为止,我已经用正则表达式制作了一个脚本,它会产生这个输出:

0.26 0.22 0.18

现在我想将该行中的数字数量作为行前的整数返回,如下所示:

3 0.26 0.22 0.18 

如果在该行中添加了额外的数字,即使它是 0,它也应该加起来

比如我想退货

0.26 0.22 0.18 0 0 

作为

5 0.26 0.22 0.18 0 0

到目前为止的代码:

import re 

IfcFile = open('IfcOpenHouse.ifc', 'r')

IfcColourData = re.compile("IFCCOLOURRGB\(\$,([\d\.]+),([\d\.]+),([\d\.]+)")

RadFile = open('IFC2RAD.rad', 'w')

for RadColourData in IfcFile:
    RGB_Data = IfcColourData.search(RadColourData)
    if RGB_Data:
        RadFile.write('mod material name' + '\n')
        RadFile.write('0' + '\n')
        RadFile.write('0' + '\n')
        g = RGB_Data.groups()
        RadFile.write('{0} {1} {2}\n\n'.format(g[0], g[1], g[2]))


IfcFile.close() 
RadFile.close()

我应该使用 len() 吗?以及如何准确指定浮点数和/或整数的数量,而不是该行中的所有字符?

【问题讨论】:

  • 零是从哪里来的?您的正则表达式没有捕获任何单个数字
  • 你的意思是行尾的零?它们定义了输出中材质的镜面反射和粗糙度。并非每一行都有这两个零。
  • 是的,但是它们来自哪里,添加一些示例输入
  • 抱歉,我将它们“手动”放在那里作为示例。很抱歉让您感到困惑。
  • 不知道他们来自哪里,就不可能回答你的问题

标签: python regex char string-length


【解决方案1】:

您的问题也不是很清楚,为了更好的结果,请澄清。看看你是否正在寻找这个

import re
a='IFCCOLOURRGB($,0.26,0.22,0.18,1)'
d= (re.findall(r'[-+]?\d*\.\d+|\d+', a))
d[0]=len(d)
for num in d:
    print num,

【讨论】:

  • 我对编程和 stackoverflow 还是很陌生。如果我的问题不是那么清楚,我很抱歉。也许我用很多不必要的信息解释得太详细了。无论如何,我的问题已经在 cmets 中得到解答,我发现您的解决方案同样有效。非常感谢。
猜你喜欢
  • 2019-05-28
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多