如何使用正则表达式去除带<|>分隔符字符串的多余空白并修复异常输出
问题原因分析
- 正则表达式存在语法错误:空白字符匹配应使用
\s而非s,同时分隔符<|>中的|是正则特殊字符,必须转义才能匹配字面量,原正则未转义导致匹配逻辑完全不符合预期,才会产生多余的分隔符。 - 原有逻辑没有覆盖「分隔符后接换行+空白」的场景,导致跨行的日期字段前的空白没有被清除。
修复后的完整代码
import re test_str = '''PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01/03 BBBBBB<|>S2<|> 2021/02/03 CCCCC<|>S1<|>2021/03/05''' # 匹配<|>前后的所有空白(包括换行),替换为单个<|> regex = r'\s*<\|>\s*' subst = "<|>" # 先替换所有分隔符周围的空白,再按换行拆分,过滤空行后输出 for line in re.sub(regex, subst, test_str).split('\n'): line = line.strip() if line: print(line)
输出结果
PERSON_ID<|>DEPT_ID<|>DATE_JOINED AAAAA<|>S1<|>2021/01/03 BBBBBB<|>S2<|>2021/02/03 CCCCC<|>S1<|>2021/03/05
优化说明
- 正则
\s*<\|>\s*可以匹配分隔符前后任意数量的空白字符(包含空格、制表符、换行符),一次性把分隔符周围的多余内容全部清理,自动把跨行的字段拼接回同一行的分隔符后。 - 不需要加
re.MULTILINE参数,当前匹配逻辑已经可以覆盖跨行空白的场景。 - 拆分后逐行strip过滤空行,确保行首行尾没有多余空白。
内容的提问来源于stack exchange,提问作者Barney-LoveStudy
相关产品推荐
相关产品推荐

