如何用Regex提取BEGIN:VEVENT与END:VEVENT间的所有数据块?
提取CSV中BEGIN:VEVENT到END:VEVENT的独立数据块的正则方案
直接用这个正则表达式就能精准分割每个VEVENT块:
(?s)BEGIN:VEVENT.*?END:VEVENT
正则说明
(?s):开启单行模式,让.可以匹配换行符(VEVENT块本身是多行结构,必须加这个才能跨行完整匹配)BEGIN:VEVENT:精准匹配块的起始标记.*?:非贪婪匹配任意字符,避免把多个VEVENT块合并成一个(如果用贪婪的.*,会从第一个BEGIN直接匹配到最后一个END)END:VEVENT:精准匹配块的结束标记
在自动化工具中的用法
Make(原Integromat)
- 添加「Text」模块,选择「Match Pattern」动作
- 将CSV内容填入「Input」字段
- 粘贴上述正则到「Pattern」字段
- 勾选「Extract all matches」选项,运行后即可得到所有独立的VEVENT块列表
Zapier
- 添加「Formatter by Zapier」工具,选择「Text」分类下的「Extract Pattern」动作
- CSV内容填入「Input」字段
- 正则填入「Pattern」字段
- 开启「Extract All Matches」,执行后就能获取分割后的每个VEVENT块
注意事项
- 主流自动化工具(Make/Zapier等)都支持PCRE正则语法,这个表达式可以直接使用
- 若测试时出现匹配不全,检查是否正确开启单行模式(部分工具需手动在正则开头加
(?s),或在设置里勾选单行模式) - 即使VEVENT块内包含引号、逗号等特殊字符,正则依然有效,不会影响分割结果
内容的提问来源于stack exchange,提问作者シンニエンSinnien
相关产品推荐
相关产品推荐

