如何有效地从字符串中提取子字符串(使用或x)

2024-10-04 11:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个建筑物的墙名列表,如下所示:

wall_list = ['W1_1F-12F', 'W2_1F-9F', 'W3_10F-12F']

我想将它们分成三个部分,或者提取每个元素(如W1、1F、12F),以便在另一个过程中使用墙名称或楼层信息

wall_name = [W1, W2, W3...]
Floor_from = [1F, 1F, 10F...]
Floor_to = [12F, 9F, 12F...]

这是我最终想要得到的结果

我认为如果存在这种方法,通过在_-之前或之后读取字符串来解决这个问题将是有效的


Tags: name名称信息元素列表过程listw1
3条回答
import re

def extract_components(wall):
    match = re.match("^(W\d+)_(\d+F)-(\d+F)", wall)
    return match.groups()

def extract(walls):
    return list(zip(*[extract_components(wall) for wall in walls]))

wall_name, floor_from, floor_to = extract(wall_list)

结果:

(+) >>> wall_name
('W1', 'W2', 'W3')
(+) >>> floor_from
('1F', '1F', '10F')
(+) >>> floor_to
('12F', '9F', '12F')

您可以使用^{}函数的regex版本和一个简单的模式:

import re

wall_list = ['W1_1F-12F', 'W2_1F-9F', 'W3_10F-12F']

for s in wall_list:
    print(re.split('[_-]', s))

这将提供:

['W1', '1F', '12F']
['W2', '1F', '9F']
['W3', '10F', '12F']

要将它们分离为元素,只需将结果放入^{}

import re

wall_list = ['W1_1F-12F', 'W2_1F-9F', 'W3_10F-12F']

wall, floor_from, floor_to = zip(*(re.split('[_-]', s) for s in wall_list))
print(wall, floor_from, floor_to, sep='\n')

现在将给出:

('W1', 'W2', 'W3')
('1F', '1F', '10F')
('12F', '9F', '12F')
wall_list = ["W1_1F-12F", "W2_1F-9F", "W3_10F-12F"]
wall_name = [] #[W1, W2, W3...]
Floor_from = [] #[1F, 1F, 10F...]
Floor_to = [] #[12F, 9F, 12F...]
for i in wall_list:
    wall_name.append(i.split("_")[0])
    Floor_from.append(i.split("_")[1].split("-")[0])
    Floor_to.append(i.split("_")[1].split("-")[1])
print(wall_name,Floor_from,Floor_to)

相关问题 更多 >