正则表达式拆分字符串的核心是re.split()方法,以匹配的分隔符为切割点返回子串列表;支持字符集指定分隔符、保留分隔符、排除特定上下文(如引号内)、处理空字段及限制分割次数。
正则表达式拆分字符串的核心在于用 re.split() 方法,把匹配到的分隔符(而非字符串本身)当作切割点,从而得到子串列表。
最常见需求是按某个或某几个固定字符切分。比如用逗号、分号或竖线分割:
re.split(r'[;,|]', text) —— 方括号内是字符集,匹配其中任意一个.、*、+ 在字符集里不需转义;但 ]、-、^ 放在特定位置时有特殊含义,建议放开头或结尾避免歧义re.split(r'[;,s]+', "a,b; ctd") 得到 ['a', 'b', 'c', 'd'],其中 s 匹配空白,+ 表示连续多个也算一次分隔默认 re.split() 会丢弃分隔符。若想保留,可用带捕获组的模式:
re.split(r'([;,|])', text) —— 括号让分隔符也进入结果列表['a', ',', 'b', ';', 'c'],偶数索引是内容,奇数索引是分隔符re.findall(r'([^;,|]+)([;,|]?)', text),但逻辑更重,按需选择有时分隔符有例外,比如引号内的逗号不算分隔符。这时需用否定逻辑或环视断言:
re.sub() 替换掉“受保护”的分隔符(如把 "a,b" 中的逗号临时替换成特殊标记),再 split,最后还原re.split(r',(?=(?:[^"]*"[^"]*")*[^"]*$)', text) —— 利用正向先行断言,只在引号外的逗号处切分(适用于简单双引号包裹场景)连续分隔符或首尾分隔符会产生空字符串,常需清理:
re.split(r's+', text.strip()) 先去头尾空白,再按一个及以上空白切分,避免空项[x for x in result if x]
maxsplit= 参数限制最多切几次,例如 re.split(r's+', text, maxsplit=2) 只切前两个空格,返回最多 3 段