MST

星途 面试题库

面试题:Python字符串空白处理:复杂场景应用

假设你有一个包含多行文本的字符串,每行文本可能包含不同数量的空白字符(包括制表符、换行符等)。要求编写Python代码,将每一行文本进行如下处理:去除行首和行尾的所有空白字符,并且对于行内的空白字符,将连续的空白字符序列(包括不同类型的空白字符混合)统一替换为一个空格。同时,要处理可能出现的编码问题,确保代码在不同编码格式的字符串输入下都能正确工作。请详细说明实现思路以及涉及到的Python字符串处理函数和编码处理函数。
38.1万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 按行拆分字符串:使用 splitlines() 函数将字符串按行拆分成列表。
  2. 处理每行文本
    • 去除行首和行尾空白字符:使用 strip() 函数。
    • 替换行内连续空白字符为单个空格:使用 re 模块的 sub() 函数,通过正则表达式匹配连续的空白字符序列并替换为单个空格。
  3. 处理编码问题:在读取和处理字符串时,确保使用合适的编码方式。在Python 3中,字符串默认以Unicode编码,处理时无需额外转换,但在读取文件或处理外部输入时,要指定正确的编码,如 open(file_path, 'r', encoding='utf-8')

Python字符串处理函数

  1. splitlines():将字符串按行拆分成列表,行边界符(如 \n, \r, \r\n)会被忽略。
  2. strip():返回去除字符串开头和结尾空白字符的副本。
  3. re.sub():在字符串中使用正则表达式替换匹配的子字符串。

编码处理函数

  1. open():在读取文件时,通过 encoding 参数指定文件的编码格式,如 utf-8, gbk 等。

代码示例

import re


def process_text(text):
    lines = text.splitlines()
    processed_lines = []
    for line in lines:
        line = line.strip()
        line = re.sub(r'\s+',' ', line)
        processed_lines.append(line)
    return '\n'.join(processed_lines)


你可以使用以下方式调用函数处理不同编码格式的输入:

# 假设从文件读取,以UTF - 8编码为例
try:
    with open('input.txt', 'r', encoding='utf-8') as f:
        content = f.read()
        result = process_text(content)
        print(result)
except UnicodeDecodeError:
    # 如果UTF - 8编码失败,尝试GBK编码
    with open('input.txt', 'r', encoding='gbk') as f:
        content = f.read()
        result = process_text(content)
        print(result)