gpt4 book ai didi

带有数组属性的 IFC 的正则表达式

转载 作者:行者123 更新时间:2023-12-04 10:30:39 25 4
gpt4 key购买 nike

IFC 是用于建筑项目的 STEP 文件的变体。 IFC 包含有关正在 build 的建筑物的信息。该文件基于文本,易于阅读。我正在尝试将此信息解析为 python 字典。
每行的一般格式将类似于以下内容
2334=IFCMATERIALLAYERSETUSAGE(#2333,.AXIS2.,.POSITIVE.,-180.);
理想情况下,这应该被解析为 int #2334, IFCMATERIALLAYERSETUSAGE, #2333,.AXIS2.,.POSITIVE.,-180。
我找到了解决方案 Regex includes two matches in first match
https://regex101.com/r/RHIu0r/10对于部分问题。
但是,在某些情况下,数据包含数组而不是值,如下例所示
第 2335 章
这种情况需要解析为#2335, IFCRELASSOCIATESMATERIAL, '2ON6$yXXD1GAAH8whbdZmc', #5,$,$, [#40,#221,#268,#281],#2334
其中 [#40,#221,#268,#281] 是作为数组存储在单个变量中的
数组可以在中间或最后一个变量。
您能否协助创建正则表达式以获得所需的结果
我创建了 https://regex101.com/r/mqrGka/1有要测试的案例

最佳答案

这是一个从您在测试用例中使用正则表达式达到的点继续的解决方案:

file = """\
#1=IFCOWNERHISTORY(#89024,#44585,$,.NOCHANGE.,$,$,$,1190720890);
#2=IFCSPACE(';;);',#1,$);some text);
#2=IFCSPACE(';;);',#1,$);
#2885=IFCRELAGGREGATES('1gtpBVmrDD_xsEb7NuFKc8',#5,$,$,#2813,(#2840,#2846,#2852,#2858,#2879));
#2334=IFCMATERIALLAYERSETUSAGE(#2333,.AXIS2.,.POSITIVE.,-180.);
#2335=IFCRELASSOCIATESMATERIAL('2ON6$yXXD1GAAH8whbdZmc',#5,$,$,(#40,#221,#268,#281),#2334);
""".splitlines()

import re
d = dict()
for line in file:
m = re.match(r"^#(\d+)\s*=\s*([a-zA-Z0-9]+)\s*\(((?:'[^']*'|[^;'])+)\);", line, re.I|re.M)
attr = m.group(3) # attribute list string
values = [m.group(2)] # first value is the entity type name
while attr:
start = 1
if attr[0] == "'": start += attr.find("'", 1) # don't split at comma within string
if attr[0] == "(": start += attr.find(")", 1) # don't split item within parentheses
end = attr.find(",", start) # search for a comma / end of item
if end < 0: end = len(attr)
value = attr[1:end-1].split(",") if attr[0] == "(" else attr[:end]
if value[0] == "'": value = value[1:-1] # remove quotes
values.append(value)
attr = attr[end+1:] # remove current attribute item
d[m.group(1)] = values # store into dictionary

关于带有数组属性的 IFC 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60440876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com