在模式之间匹配文本

2024-10-02 22:26:40 发布

您现在位置:Python中文网/ 问答频道 /正文

在数量诗体中(就像希腊和拉丁诗歌中使用的诗句),诗行被分成两部分,分别称为海绵和手指。dactyl是一个长元音(如ā),后跟两个短元音,而spondee是两个长元音。在

我的目标是在Python中自动将行拆分为spondee和dactyl。在

给我一句话

ārma virūmqe canō

我在试着得到输出

^{pr2}$

我一直在想,使用正则表达式来查找模式(long,short,short)或(long,long)是个好主意,但我似乎不知道如何处理这样一个事实:这些元音很少是连续的,而且它们之间的辅音数量每次都会变化。在

有没有一种方法可以使用正则表达式来查找包含任意数量的其他不相关字符的特定字符?如果不是,有没有另一种相对优雅的方式来实现同样的目标?在

编辑:

如果你需要更多的例子,@Junuxx指出一个伟大的网站。Here's一个链接,指向Aeneid的前7行的扫描图片,我从中得到了上面的例子。每次一个音段中只有两个元音,这就是一个spondee。如果有三个,那就是手指。忽略粗体行,因为它们只是表示一行中的第三个除法。在

编辑二:

看来我在例子里弄错了。我写的是“virumqe”,实际上,这行字是“virumque”。在拉丁语中,(oe,ae)被认为是元音。那么,我想,我必须修正我的问题,问问是否也可以处理这些问题。在


Tags: 编辑目标数量诗句字符long例子手指
1条回答
网友
1楼 · 发布于 2024-10-02 22:26:40

下面的代码适用于您的示例,但是正则表达式相当长,因为没有简洁的方法来匹配辅音。在

指纹的正则表达式分解:

 [^āēīōūaeiou]*  # 0 or more consonants
 [āēīōū]         # a long vowel
 [^āēīōūaeiou]*  # 0 or more consonants
 [aeiou]         # a short vowel
 [^āēīōūaeiou]*  # 0 or more consonants
 [aeiou]         # a short vowel 
 [^āēīōūaeiou]*? # 0 or more consonants, but as few as possible

代码:

^{pr2}$

输出:

ārma vi / rūmqe ca / nō

相关问题 更多 >