Python正则表达式返回浮点数

时间:2015-01-08 17:20:00

标签: python regex

对于项目,我必须从文件中提取RGB值,其定义如下:

#71=IFCCOLOURRGB($,0.75,0.73,0.6800000000000001);
#98=IFCCOLOURRGB($,0.26,0.22,0.18);

我想重新调整RGB数据并将其写入一个新文件:

0.75 0.73 0.68

0.26 0.22 0.18

到目前为止,我已经为循环创建了这个:

import re 

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

IfcColourRGB = re.compile('ifccolourrgb', re.IGNORECASE)


for rad_rgb_data in IfcFile:
    if re.search(IfcColourRGB, rad_rgb_data):
        print(IfcColourRGB.sub('', rad_rgb_data))

返回:

#71=($,0.75,0.73,0.6800000000000001);

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

现在我对编程很陌生,我想知道我是否为我的任务选择了正确的方法,我一直在阅读正则表达式,但我不完全理解如何摆脱所有# =(,:字符以及如何准确指定要返回的数字以及哪些数字没有。是否可以显式/单独定义所有正则表达式并将它们组合在一个for循环中,以便我更容易理解它们?

3 个答案:

答案 0 :(得分:2)

你可以使用re.findall()带有正面的后视模式,然后用,分割并转换为float:

>>> s="""#71=IFCCOLOURRGB($,0.75,0.73,0.6800000000000001);
... #98=IFCCOLOURRGB($,0.26,0.22,0.18);"""
>>> import re
>>> l=re.findall(r'(?<=\$,)[\d\.,]+',s)
>>> [map(float,i.split(',')) for i in l]
[[0.75, 0.73, 0.68], [0.26, 0.22, 0.18]]

答案 1 :(得分:0)

要提取颜色,请使用:

IFCCOLOURRGB\((?P<Red>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?),(?P<Green>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?),(?P<Blue>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?)\)

捕获小组:

红色:红色值 绿色:绿色的价值, 蓝色:蓝色值


match = re.search(r"IFCCOLOURRGB\((?P<Red>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?),(?P<Green>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?),(?P<Blue>\.[0-9]{1,16}|[0-9]+(?:\.[0-9]{1,16})?)\)", subject)
if match:
    result1 = match.group("Red")
    result2 = match.group("Green")
    result3 = match.group("Blue")       
else:
    result = ""

答案 2 :(得分:0)

我认为你是在思考这个问题:^)你可以遍历这些行并对每个行进行搜索。

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

for Line in IfcFile:
    Result = Searcher.search(Line)
    if Result:
        print Result.groups()

如果您只是将值写回文件,则除了截断00000001并打印到2位有效数字之外,您不需要转换为浮点数。