首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于Regex的数据抽取

基于Regex的数据抽取
EN

Stack Overflow用户
提问于 2015-06-10 10:05:19
回答 4查看 1.5K关注 0票数 1

我在文本文件"file.txt“中有数据

菜谱和菜单 专家意见 配料 假日及事件 社区 视频 夏季烹饪 扁豆糙米汤 1991年1月美食 3.5/4 审查(83) 90% 再来一次 有些汤确实能激发出一种类似于爱的奉献,而这也是 他们。在寒冷的冬天,当美食编辑们思考着什么汤的问题 煮 审查(83) 产量:约14杯,供应6至8杯。 成分 五杯鸡汤 1 1/2杯小扁豆,摘取后洗净 1杯糙米 一罐32到35盎司的西红柿,沥干,保留果汁,然后切碎。 3根胡萝卜,纵切一半,横切成1/4英寸。 1个洋葱,切碎 一柄芹菜,切碎 3个大蒜丁香,切碎 1/2茶匙碎罗勒干 1/2茶匙碎干或干果 1/4茶匙碎百里香 1叶 1/2杯鲜欧芹叶切碎 2汤匙苹果醋,或品尝 制备 在一个很重的水壶里把汤、三杯水、小扁豆、米饭、西红柿和保留的果汁混合在一起,

我想提取成分制剂之间的数据。

我为它写了以下的正则表达式:-

代码语言:javascript
复制
(?s).*?Ingredients(.*?)Preparation.*

但它正在提取第3行斜体成分之间的数据。

file.txt与制备,而配料制备之间的数据无关

为了解决这个问题,我应该对regex代码做哪些修改?

提前感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-10 10:21:26

试着让你的第一个.*贪婪。它会吃掉所有的Ingredients直到Preparation之前的最后一个

代码语言:javascript
复制
(?s).*Ingredients(.*?)Preparation.*

演示:https://regex101.com/r/mQ5eK5/1

票数 1
EN

Stack Overflow用户

发布于 2015-06-10 10:20:59

您可以使用惰性量词.*?和第二个.*

代码语言:javascript
复制
(?s).*\bIngredients\b(.*?)\bPreparation\b

请参阅演示

或者您可以使用脾气暴躁的象征,然后不需要第一个.*

代码语言:javascript
复制
(?s)\bIngredients\b(?:(?!\b(?:Ingredients|Preparation)\b).)*\bPreparation\b

请参阅演示

票数 2
EN

Stack Overflow用户

发布于 2015-06-10 10:19:07

代码语言:javascript
复制
(?s).*?[*]{2}Ingredients[*]{2}(.*?)[*]{2}Preparation[*]{2}.*

[*]{2}告诉regex您想要列表中的一个字符(这里是一个*),非常巧妙地是{2}的两倍。

与转义相比,我更喜欢使用字符类,我发现它们比下面这些类更易读:

代码语言:javascript
复制
(?s).*?\*{2}Ingredients\*{2}(.*?)\*{2}Preparation\*{2}.*

而且,根据你所使用的语言,你也可能不得不避开反斜杠。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30753218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档