如何从另一个字符串中提取多个特定的字符串行?

How to extract multiple specific string lines from another string?

我使用的是Python开发的FEM软件(Code_Aster),但其文件扩展名为.comm。但是,可以在 .comm 个文件中插入 Python 个片段。

我有一个函数,其中 returns 很长 string 包含 nodeselementselements group 等,形式如下:

我的目标是将每一行及其关联坐标或节点添加到 list/dictionary。例如:

dct_nodes = {
    'N5': [
        9.99999999998248E-03,
        0.00000000000000E+00,
        0.00000000000000E+00
    ]
}

dct_elems = {
    'M5': ['N1', 'N5'],
    'M85': ['N342', 'N224', 'N378']
}

我尝试使用 re.splitre.searchre.findall 的正则表达式,但我似乎无法获得所需的内容。这就是我到目前为止所做的。

node_list = list()

for item in ttt.split("\n"):
    if len(item) != 0: # there are some lines with zero len
        if item[0] == 'N':
            node_list.append(re.sub("\s+", ",", item.strip()))

type(node_list[0]) returns string,而我想要一个嵌套列表,这样我就可以抓取 node_list[0][0]node_list[0][1] 进行数据操作.我怎样才能在 , 上拆分这个字符串,这样我就可以访问,例如,坐标。我希望任何人都可以提供帮助。

如果没有其他行以 NM 开头,下面的脚本可以完美地完成工作。

import re

ttt="""
%
COOR_3D
N1      0       0       0
N2      1       5       9
N3      2       6       10
N4      3       7       11
N5      4       8       12

FINSF
%
SEG2
M1      N1      N2
M2      N3      N4
FINSF
%
TRIA3
M3      N5      N6      N7
M4      N8      N9      N11
M5      N12     N13     N14"""


def finder(var,string):
    temp_dic = dict()
    for item in string.split("\n"):
        if len(item) != 0: # there are some lines with zero len
            temp = re.sub("\s+", ",", item.strip()).split(',')
            if item[0] == var:
                temp_dic[temp[0]] = [e for e in temp[1:]]
    return temp_dic

                
nodes = finder('N',ttt)
elems = finder('M',ttt)

另请注意,如果您需要对节点的坐标进行算术运算,则必须将它们转换为 float,因为它们尚未 string。您可能可以使用三级运算符来决定 e 是否应该转换为 float 或仍然是 string。我希望你觉得这个答案有用。