You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何用正则表达式分割带编号列表格式的字符串?

解决方案:用正则断言精准匹配列表编号

要规避分割带小数点的数字(如货币),核心是只匹配列表项的编号点——也就是那种前面是字符串开头/空白、后面跟着空白的数字+.组合,而非数字内部的小数点。

可以用带断言的正则表达式实现:

import re

def split_list_string(s):
    # 分割匹配:前面是开头/空白,后面是空白的 数字+.
    parts = re.split(r"(?<=^\s*|\s)\d+\.(?=\s)", s)
    # 过滤空项并去除首尾空白
    return [item.strip() for item in parts if item.strip()]

正则表达式解释

  • (?<=^\s*|\s):正向回顾后发断言,确保数字+.的前面是:
    • ^\s*:字符串开头(允许带前置空白,比如缩进的列表)
    • 或\s:任意空白字符(空格、制表符等)
      这就排除了像$2.2里2.前面是数字2的情况。
  • \d+\.:匹配1个及以上数字加小数点
  • (?=\s):正向先行断言,确保小数点后面是空白字符,只匹配列表编号(比如1. ),而非数字内部的点(比如2.2里的2.后面是数字2)

测试示例

  1. 普通列表字符串:
s1 = "1. one. 2. two. 3. three."
print(split_list_string(s1))
# 输出:['one.', 'two.', 'three.']
  1. 带货币的列表字符串:
s2 = "1. I have $2.2 million. 2. blah blah."
print(split_list_string(s2))
# 输出:['I have $2.2 million.', 'blah blah.']

扩展场景适配

如果列表编号后面是换行(比如多行列表),这个正则也能正常工作,因为(?=\s)会匹配换行符。例如:

s3 = """1. First item
2. Second item with $3.5 budget
3. Third item"""
print(split_list_string(s3))
# 输出:['First item', 'Second item with $3.5 budget', 'Third item']

内容的提问来源于stack exchange,提问作者anonYmOusee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 20:55:05