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

Python正则表达式拆分字符串:按换行+大写字母或项目符号遇阻

Python正则拆分字符串:按换行+大写字母/项目符号拆分方案

我来帮你解决这个正则拆分的问题!看起来你卡在了拆分规则的匹配上,尤其是按「换行符+大写字母」拆分时只拿到第一个结果,我给你梳理下正确的思路和代码。

先解决核心问题:按换行+大写字母拆分

你之前的正则只返回第一个单词,大概率是因为没有用零宽断言,或者错误限制了匹配范围。正确的做法是在「换行符之后、大写字母之前」的位置拆分,而不是把这两个字符当作分隔符吃掉。

用这个正则就能实现:

import re

# 示例文本(模拟从文件读取的内容)
text = """Hello world
This is a test paragraph
Another line starts with capital
Last example line"""

# 拆分正则:匹配换行后紧跟大写字母的位置
split_result = re.split(r'(?<=\n)(?=[A-Z])', text)
print(split_result)

输出结果会是:

['Hello world', 'This is a test paragraph', 'Another line starts with capital', 'Last example line']

正则解释:

  • (?<=\n):正向零宽后行断言,确保当前位置前面是换行符(不会消耗换行符本身)
  • (?=[A-Z]):正向零宽先行断言,确保当前位置后面是大写字母(也不会消耗这个字母)
    这样拆分后,每个段落的开头大写字母和换行符都会保留在对应的段落里,完美符合你的需求。

扩展需求:同时支持项目符号拆分

如果还要按项目符号(比如-、*、+,甚至带前置空格的情况)拆分,只需要在正则里加上另一个匹配规则,同时开启多行模式让^匹配每一行的开头:

import re

# 包含项目符号的示例文本
text = """First main paragraph
Second paragraph here
- First bullet point
  Indented sub content
* Second bullet item
Third main paragraph starts with capital"""

# 同时匹配两种拆分规则的正则
split_pattern = r'(?<=\n)(?=[A-Z])|(?=^\s*[-*+])'
# 注意要加 re.MULTILINE 让 ^ 匹配每行开头
split_result = re.split(split_pattern, text, flags=re.MULTILINE)

# 清理拆分后可能出现的空字符串和多余空格
clean_result = [item.strip() for item in split_result if item.strip()]
print(clean_result)

输出结果:

['First main paragraph', 'Second paragraph here', '- First bullet point', 'Indented sub content', '* Second bullet item', 'Third main paragraph starts with capital']

新增规则解释:

  • (?=^\s*[-*+]):正向零宽先行断言,匹配「行开头可能有若干空格,然后是项目符号」的位置,这样拆分后项目符号会和对应的内容在一起。
  • re.MULTILINE:必须开启这个标志,否则^只会匹配整个字符串的开头,无法识别每行的项目符号。

可能的坑点排查

你之前只拿到第一个单词,可能是这两个原因:

  1. 用了re.match()而不是re.split():match()只匹配字符串开头,自然只能拿到第一个结果;
  2. 正则里写了^[A-Z]但没开多行模式:同样只会匹配整个文本的第一个大写字母开头的位置。

如果你的项目符号有其他形式(比如•、>),只需要修改正则里的[-*+]部分,比如改成[-*+•>]即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:50:28