Python如何按多种分隔符及其任意组合拆分字符串得到非空结果
解决方案
你遇到的核心问题是原有正则仅匹配单个分隔符,连续多个分隔符就会拆分出空字符串,不需要枚举所有分隔符组合,有两种非常简便的实现方式:
方案1:优化re.split的正则规则
给分隔符的匹配规则加上+量词,代表匹配1个或多个连续的分隔符,连续的多组分隔符会被当做一个整体拆分,再过滤掉可能存在的首尾空字符串即可:
import re x = "121, 1238,\nxyz,\n 123abc \n\rabc123" result = [item for item in re.split(r'[,\n\r\s]+', x) if item]
输出结果:
['121', '1238', 'xyz', '123abc', 'abc123']
方案2:用re.findall直接提取目标内容
反过来思考,你需要的是所有不属于分隔符的连续字符,直接用反向匹配规则提取即可,不需要额外处理空字符串:
import re x = "121, 1238,\nxyz,\n 123abc \n\rabc123" result = re.findall(r'[^,\n\r\s]+', x)
输出结果和上面完全一致。
说明:正则里的
[]是字符集,匹配内部任意一个字符;+代表匹配前一个规则1次及以上;[^xxx]是反向字符集,匹配所有不属于内部指定的字符。
内容的提问来源于stack exchange,提问作者RatDon
相关产品推荐
相关产品推荐

