如何使用正则表达式按换行分割字符串并忽略空行及全空白行?
正则实现分割过滤空白行方案
完全可以直接通过正则实现需求,不需要事后过滤split结果,两种常用写法如下:
- 基于
re.split的实现
核心思路是将「任意数量空白字符 + 一个及以上连续换行 + 任意数量空白字符」作为统一分隔符,提前去掉原字符串首尾的空白避免生成空结果:import re data = '''a, b, c
d, e, f
g. h, i
j, k , l
'''
result = re.split(r'\s*\n+\s*', data.strip())
运行后`result`的输出和预期完全一致:`['a, b, c', 'd, e, f', 'g. h, i', 'j, k , l']` 正则逻辑说明: - `\s*`匹配换行前后0个或多个空白字符(空格、制表符等都可识别) - `\n+`匹配1个或多个连续换行符,不管是纯空行、还是夹着空格的空白行,都会被整体识别为分隔符 - 基于`re.findall`的实现(鲁棒性更强) 不需要提前处理字符串首尾空白,直接开启多行模式,匹配所有包含至少一个非空白字符的有效行即可: ```python # 保留每行首尾的空格 result = re.findall(r'^.*\S.*$', data, re.M) # 如果需要自动去掉每行首尾的多余空格,用这个版本 result = re.findall(r'^\s*(.*\S.*)\s*$', data, re.M)
这里的re.M是多行模式标记,开启后^和$会匹配每一行的行首、行尾,而非整个字符串的首尾。
之前直接用re.split("\n", data)无法得到预期结果的原因是:仅将单个换行符作为分隔符,夹在换行之间的空格、连续空换行都没有被纳入分隔符匹配范围,自然会分割出全空格、空字符串的无效项。
内容的提问来源于stack exchange,提问作者user11004963
相关产品推荐
相关产品推荐

