非固定模式的正则表达式

非固定模式的正则表达式

我正在尝试提出正确的正则表达式(与 python 兼容),该正则表达式将与包含示例输入的文件相匹配,如下所示:

On the third day of Christmas
 my true love sent to me:
 three worms a eating
 two garlic cloves
 and a koala in a bamboo spree

这只是一种可能性。重要的部分是第一行有“On the X day of Christmas”,没有错误的大小写(如 ChrISTmas)。

那应该是这样的

\^On the [first|second|third|fourth]... 

一直到第十二名。结局也一样,最后一行只需要“还有一个……”

 $and a *\         (?)

但是如何使用正则表达式检查文件的每一行的顺序是否正确

例如,“三只蠕虫”之前的“两个大蒜...”是不正确的

 On the third day of Christmas
 my true love sent to me:
 two garlic cloves         #SWITCHED
 three worms a eating
 and a koala in a bamboo spree

同样,它也不能跳位。如果它以“五个 X”开头,则下一行需要是“四个 Y”、“三”、“二”等。

 On the third day of Christmas
 my true love sent to me:
 five cats a dancing       #Goes from 'five cats' to 'two garlic', not ok
 two garlic cloves
 and a koala in a bamboo spree

以下是我想出的一些匹配多行正则表达式的尝试,但没有成功。http://www.codeshare.io/jLI9l

这是我删除文件输入并尝试其他方法的另一例:http://www.codeshare.io/u4E7t

如果输入文件结构/匹配正确,我希望它能够匹配并打印“正确”

答案1

对我来说,正则表达式确实不是最好的方法,因为对于您测试的每个新行,您需要有某种记忆来记住第一个单词中的前一个数字。

我并不是说它不能完成(你有一组有限的数字,所以你可以在技术上用非常讨厌的多行正则表达式“手动”枚举每个可能的文件组合),我的意思是是:当你实际上可以编写Python代码来做到这一点(更快)时,为什么要首先使用它?您可以拥有类似所有数字["one", ..., "twelve"]和天数的排序列表["first", ..., "twelfth"],然后按行拆分文件(作为一个大文件str)(使其成为 s 列表str),然后for使用这些列表中的索引在循环中测试行?

相关内容