如何从另一个字符串中提取多个特定的字符串行?
How to extract multiple specific string lines from another string?
我使用的是Python开发的FEM软件(Code_Aster),但其文件扩展名为.comm
。但是,可以在 .comm
个文件中插入 Python 个片段。
我有一个函数,其中 returns 很长 string
包含 nodes
、elements
、elements 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.split
、re.search
和 re.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]
进行数据操作.我怎样才能在 ,
上拆分这个字符串,这样我就可以访问,例如,坐标。我希望任何人都可以提供帮助。
如果没有其他行以 N
或 M
开头,下面的脚本可以完美地完成工作。
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
。我希望你觉得这个答案有用。
我使用的是Python开发的FEM软件(Code_Aster),但其文件扩展名为.comm
。但是,可以在 .comm
个文件中插入 Python 个片段。
我有一个函数,其中 returns 很长 string
包含 nodes
、elements
、elements 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.split
、re.search
和 re.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]
进行数据操作.我怎样才能在 ,
上拆分这个字符串,这样我就可以访问,例如,坐标。我希望任何人都可以提供帮助。
如果没有其他行以 N
或 M
开头,下面的脚本可以完美地完成工作。
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
。我希望你觉得这个答案有用。