Python 用于短语中多个换行符的正则表达式
我正在用Python学习正则表达式,我想准备一个RE来匹配和收集以下输入中的句子:Python 用于短语中多个换行符的正则表达式,python,regex,Python,Regex,我正在用Python学习正则表达式,我想准备一个RE来匹配和收集以下输入中的句子: 食物:蛋糕:由面粉、糖和其他配料制成的烘焙甜食 电子学:计算机:执行计算机编程操作的机器。 计算机主要由CPU、显示器、键盘和鼠标组成 汽车:汽车:汽车是一种用于运输的四轮机动车 我的预期输出应该给我类别、项目和该项目的描述。因此,对于第一项,蛋糕,RE应将“食品”、“蛋糕”、“由面粉、糖和其他成分制成的烘焙甜食”归类 我当前的RE如下所示: [0-9]+\s*.\s*(\w*)\s*:\s*(\w*)\s*:\
计算机主要由CPU、显示器、键盘和鼠标组成
[0-9]+\s*.\s*(\w*)\s*:\s*(\w*)\s*:\s*(.*)
这似乎适用于描述中没有换行符的项目。如果它有一个换行符,即示例中的计算机,则RE仅将其描述与换行符匹配。RE丢弃了该描述中的第二句话
请帮助我理解我在这里遗漏了什么。如果类别、项目和描述用双换行符分隔,您可以使用此示例对其进行解析(): 印刷品:
Food
Cake
Baked sweet food made from flour, sugar and other ingredients.
--------------------------------------------------------------------------------
Electronics
Computer
A machine to carry out a computer programming operation.
Computers mainly consists of a CPU, monitor, keyboard and a mouse.
--------------------------------------------------------------------------------
Automobile
Car
Car is a four wheeled motor vehicle used for transportation.
--------------------------------------------------------------------------------
这可能是一种基本的方法,但它适用于您提供的示例输入:
[0-9]+\s*\s*(\w*)\s*:\s*(\w*)\s*:\s*((?:.[\n\r]?)+?)(?=$\d\s*\)
基本上,我们在描述中尽可能多地使用文本(包括换行符),直到到达文件的末尾,或者另一个数字索引
您可以看到实现每个类别都可以有多个项目吗?@RoboMop,不,类别不需要有多个项目。但是,一个项目可以有多个句子作为描述。阅读
的意思。@Tomalak我很确定这不是问题所在。如果您查看了示例输入,您会发现问题在于尽可能匹配某个项目的描述,但不包括下一个类别。我必须做的一个细微更改是在数字的或正向前瞻中添加*
。因此,我的工作规则是:[0-9]+\s*\s*(\w*)\s*:\s*(\w*)\s*:\s*((?:.[\n\r]?)+?)(?=$\d*\s*\)
。
Food
Cake
Baked sweet food made from flour, sugar and other ingredients.
--------------------------------------------------------------------------------
Electronics
Computer
A machine to carry out a computer programming operation.
Computers mainly consists of a CPU, monitor, keyboard and a mouse.
--------------------------------------------------------------------------------
Automobile
Car
Car is a four wheeled motor vehicle used for transportation.
--------------------------------------------------------------------------------