如何使用Python re库分割字符串并保留分隔符
实现方案
问题原因
原代码存在两个核心问题:
- 正则
[\(.\)]中的.在字符组内仅代表字面量点字符,不会匹配任意字符,实际仅将(、)、.三个字符作为分割依据 re.split默认不返回分割符,只有将分割规则放在捕获组中时,才会将分割符纳入返回结果- 原逻辑将括号单独作为分割标记,会直接剥离内容中的括号,同时产生首尾空字符串
修正代码
import re string = r"('Option A' | 'Option B') & ('Option C' | 'Option D')" # 用捕获组匹配完整的括号包裹结构,分割时自动保留该结构 word_list = [s for s in re.split(r"(\([^()]+\))", string) if s.strip()] print(word_list)
运行输出完全符合预期:
["('Option A' | 'Option B')", ' & ', "('Option C' | 'Option D')"]
规则说明
- 正则
(\([^()]+\))为捕获组,匹配左右括号包裹、中间不含其他括号的完整内容 re.split遇到捕获组匹配的内容时,会将该内容作为返回列表的独立元素保留- 最后的列表推导式用于过滤分割产生的无效空字符串,保留原内容的空格格式
内容的提问来源于stack exchange,提问作者Shiraz Ahmad
相关产品推荐
相关产品推荐

