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

如何通过正则按行分组提取特定格式字符串中的内容?

正则按行分组提取特定格式内容

问题背景

我从连接器接收到以下格式的字符串:

{#{123}#};{#{abc}#}
{#{345}#};{#{def}#}
{#{789}#};{#{ghi}#}

无法修改该格式。目前使用正则表达式 (?s){#{(.*?)}#},得到的结果是 ["123", "abc", "345", "def", "789", "ghi"],希望通过正则实现按行分组的输出,得到 [("123", "abc"), ("345", "def"), ("789", "ghi")]。

正则解决方案

可以通过匹配整行内容并在每行内捕获两个目标字段的方式实现,具体正则表达式如下:

{#{(.*?)}#};{#{(.*?)}#}

正则说明

  • 不需要开启 (?s)(单行模式),因为我们要按行匹配,单行模式会让 . 匹配换行符,反而干扰行级分组
  • 每行的结构固定为 {#{X}#};{#{Y}#},直接针对这个结构写正则,第一个捕获组提取X,第二个捕获组提取Y

Python 代码示例

import re

raw_str = """{#{123}#};{#{abc}#}
{#{345}#};{#{def}#}
{#{789}#};{#{ghi}#}"""

pattern = r"{#{(.*?)}#};{#{(.*?)}#}"
result = re.findall(pattern, raw_str)
print(result)

运行结果:

[('123', 'abc'), ('345', 'def'), ('789', 'ghi')]

如果原始字符串里的换行是转义字符 \n,代码依然适用,因为 re.findall 会自动识别换行符分隔的行(只要正则不匹配跨行内容)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 11:15:34