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

如何用正则表达式提取连续的星号开头项目符号行?

问题描述

我有如下文本:

*   项目符号列表中的某段文本。
 * 同个项目符号列表中的另一段文本

用若干行普通文本打破这个模式。
这段普通文本会持续几行

 * 回到项目符号列表的某段文本
 * 继续列表内容

我希望编写一个正则表达式,提取所有属于项目符号列表的连续行。例如在上述示例中,我需要选中以下内容:

分组 1
 *   项目符号列表中的某段文本。
 * 同个项目符号列表中的另一段文本

分组 2
 * 回到项目符号列表的某段文本
 * 继续列表内容

我尝试了多个正则表达式,但无法将提取范围限制为连续的列表。例如正则表达式 re.findall(r"\* +(.*+)", text) 会将所有项目符号列表返回为单个组(无法按连续项目符号行拆分)。

解决方案

要实现按连续块提取项目符号列表,你可以使用支持多行模式的正则表达式,匹配连续的、以星号(行首允许有空格)开头的行。

代码实现

import re

text = """ *   项目符号列表中的某段文本。
 * 同个项目符号列表中的另一段文本

用若干行普通文本打破这个模式。
这段普通文本会持续几行

 * 回到项目符号列表的某段文本
 * 继续列表内容
"""

# 匹配连续的项目符号行块
pattern = r'(^\s*\*.*(?:\n\s*\*.*)*)'
list_blocks = re.findall(pattern, text, re.MULTILINE)

# 输出结果
for i, block in enumerate(list_blocks, 1):
    print(f"分组 {i}")
    print(block)
    print()

正则逻辑解释

  • re.MULTILINE:让^符号匹配每一行的开头(而非整个文本的开头)
  • ^\s*\*.*:匹配单一行的项目符号内容(行首空格+星号+行内内容)
  • (?:\n\s*\*.*)*:非捕获组,匹配后续所有连续的同格式列表行,确保只提取连续的列表块

运行这段代码后,会得到两个独立的分组,完全符合你拆分连续列表的需求。

内容的提问来源于stack exchange,提问作者A.Lovelace

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 20:00:24