我正在尝试提出正确的正则表达式(与 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
使用这些列表中的索引在循环中测试行?