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

如何用正则匹配多行条目?解决多行描述的条目提取问题

多行条目描述的正则提取解决方案

你的原正则仅能匹配单行描述,无法捕获跨换行的条目内容,核心原因是没有处理“条目描述持续到下一个条目开头”的逻辑。以下是可行的解决方法:

适配多行的正则表达式

使用以下正则(需开启多行模式re.MULTILINE):

r'^(:[a-zA-Z0-9_]+)\s+([\s\S]*?)(?=\n:|\Z)'

正则各部分解析

  • ^(:[a-zA-Z0-9_]+):匹配行首的条目名称(确保以:开头),捕获为第一个分组。
  • \s+:匹配条目名与描述之间的任意空白(制表符、空格均支持)。
  • ([\s\S]*?):非贪婪模式匹配任意字符(含换行),避免过度匹配到下一个条目。
  • (?=\n:|\Z):正向预查,匹配到下一个条目开头(换行+:)或文件结尾时停止,精准截断描述内容。

Python代码示例

import re

# 你的文件内容
content = """#% text_encoding = utf8

:xy_name1   Text

:xy_name2   Text text text to a text. 

Text and text to text text, text and 

text provides text text text text.

:xy_name3   Text
"""

# 匹配规则
pattern = r'^(:[a-zA-Z0-9_]+)\s+([\s\S]*?)(?=\n:|\Z)'
matches = re.findall(pattern, content, re.MULTILINE)

# 处理并输出结果
for entry, desc in matches:
    # 可选:清理描述中的多余换行和空白
    cleaned_desc = re.sub(r'\s+', ' ', desc).strip()
    print(f"条目: {entry}")
    print(f"描述: {cleaned_desc}\n")

运行结果

条目: :xy_name1
描述: Text

条目: :xy_name2
描述: Text text text to a text. Text and text to text text, text and text provides text text text text.

条目: :xy_name3
描述: Text

注意事项

  • 非贪婪模式*?是关键,防止将多个条目内容合并为一个描述。
  • 若需保留原始换行格式,可跳过cleaned_desc的清理步骤,直接使用原始捕获的desc。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 10:15:40