Python解析多行字符串提取单词与数字字符的实现方案咨询
问题解答
1. 更通用鲁棒的空行过滤方案
你现有的逻辑是对的,还有更简洁兼容的写法:
valid_lines = [line for line in initial_string.splitlines() if line.strip()]
优势:
- splitlines() 可以适配Windows、Linux、macOS等不同系统的换行符,比手动按
\n拆分兼容性更强 - 用
line.strip()判断直接覆盖「纯空行」「全空白符行(空格、制表符、换行符混合)」两种场景,不需要写多条件判断,出错概率更低
2. 提取单词和数字的实现方案
用正则表达式确实是最简洁的方案,你可以直接用re.findall匹配所有符合要求的片段,自动忽略无关特殊字符:
正则规则说明
用模式 r'[a-zA-Z_]+|\d+' 即可:
- 左侧
[a-zA-Z_]+匹配连续的字母、下划线(对应你要提取的单词) - 右侧
\d+匹配连续的数字 |代表或匹配,所有不符合这两个规则的字符(比如你示例里的@、|、[等)都会被自动过滤
完整示例代码
import re # 原始输入字符串示例 initial_string = """ first_word 3 5 7 @ 4 second_word 4 5 67| 5 [ """ # 1. 过滤空行 valid_lines = [line for line in initial_string.splitlines() if line.strip()] # 2. 逐行提取内容 parse_result = [] for line in valid_lines: # 提取所有单词和数字 items = re.findall(r'[a-zA-Z_]+|\d+', line) # 可选:把数字从字符串转为整数类型 items = [int(item) if item.isdigit() else item for item in items] parse_result.append(items) print(parse_result) # 输出:[['first_word', 3, 5, 7, 4], ['second_word', 4, 5, 67, 5]]
自定义调整提示
如果你的单词允许包含其他特殊字符(比如横杠-),只需要修改左侧的匹配规则即可,比如要匹配带横杠的单词就把模式改成r'[a-zA-Z_\-]+|\d+'。
内容的提问来源于stack exchange,提问作者Carlo
相关产品推荐
相关产品推荐

