MST

星途 面试题库

面试题:Python基于动态限定模式split分隔字符串及数据整理

假设你有一个字符串,其中包含一系列以不同分隔符分隔的子字符串,这些分隔符会在字符串中的某个标志位之后动态变化。例如字符串 'start:1,2;3|4 end:5-6,7;8',在'start' 到 'end' 之间,分隔符依次为逗号 ','、分号 ';' 和竖线 '|',在 'end' 之后,分隔符变为短横线 '-' 和逗号 ','。请编写Python代码,将字符串按上述规则分割,并将所有数字提取出来组成一个列表,同时要处理可能出现的异常情况,确保程序的健壮性。
48.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试
def split_and_extract_numbers(s):
    try:
        parts = s.split(' end:')
        if len(parts) != 2:
            raise ValueError("Invalid string format, missing 'end:'")
        start_part, end_part = parts
        start_substrings = start_part.split(':')[1]
        end_substrings = end_part
        delimiters_start = [',', ';', '|']
        delimiters_end = ['-', ',']
        numbers = []
        current_delimiter_index = 0
        sub_start = start_substrings
        while sub_start:
            sub_parts = sub_start.split(delimiters_start[current_delimiter_index], 1)
            if len(sub_parts) == 1:
                numbers.extend(sub_parts[0].split(delimiters_end[0]))
                break
            numbers.extend(sub_parts[0].split(delimiters_end[0]))
            sub_start = sub_parts[1]
            current_delimiter_index = (current_delimiter_index + 1) % len(delimiters_start)
        numbers.extend(end_substrings.split(delimiters_end[0]))
        result = []
        for num in numbers:
            if num.isdigit():
                result.append(int(num))
        return result
    except Exception as e:
        print(f"An error occurred: {e}")
        return []


s = 'start:1,2;3|4 end:5-6,7;8'
print(split_and_extract_numbers(s))

上述代码首先将字符串根据 end: 进行分割,然后分别处理 startend 之间以及 end 之后的部分。按照给定的分隔符顺序对字符串进行分割,并提取其中的数字组成列表。同时使用 try - except 块来捕获可能出现的异常并进行处理,确保程序的健壮性。