Perl哈希去除换行问题:清除表格导入哈希中的换行符
解决Perl哈希中电子表格导入的换行问题
问题分析
你已经移除了回车符^M(即\r),但字符串中间的换行符\n仍存在——chomp函数仅能删除字符串末尾的换行符,对字符串中间的换行无效,所以没法解决多行显示的问题。
针对性解决方案
根据你的期望输出,针对键(如$title)和值(如$num)需要不同的处理逻辑:
代码修改
$title = $sheet->{Cells}[0][$col]{Val}; $num = $sheet->{Cells}[$row+1][$col]{Val}; # 处理键:只保留换行前的内容(比如把"JOHN\nhas a car"变成"JOHN") $title =~ s/\r?\n.*//s; # 移除第一个换行及之后的所有内容,s修饰符让.匹配换行 $title =~ s/\r//g; # 清理剩余的回车符 # 处理值:将所有换行/回车替换为空格,合并成单行 $num =~ s/[\r\n]/ /g; # 把所有回车、换行换成空格 $num =~ s/\s+/ /g; # 合并连续的多个空格为单个 $num =~ s/^\s+|\s+$//g; # 去除字符串首尾的空格
逻辑说明
- 处理键:用正则
\r?\n.*匹配第一个换行(包含可能的前置回车)及之后的所有内容,直接替换为空,只保留第一行文本。 - 处理值:先把所有换行/回车统一替换为空格,再清理多余的连续空格和首尾空格,确保内容合并为一行规整的文本。
这样处理后,Data::Dumper打印出的哈希结构就会和你期望的一致。
内容的提问来源于stack exchange,提问作者paaven
相关产品推荐
相关产品推荐

