我正在尝试构建我的第一个重要的正则表达式(用于 Python),但正在苦苦挣扎。
让我们假设语言 X(不是英语)中的一个单词是一系列最小“结构”。每个“结构”可以是:
An independent vowel (basically one letter of the alphabet)
A consonant (one letter of the alphabet)
A consonant followed by a right-attaching vowel
A left-attaching vowel followed by a consonant
(Certain left-attaching vowels) followed by a consonant followed by (certain right-attaching vowels)
例如这个 3 个字符的单词:
<a consonant><a left-attaching vowel><an independent vowel>
不是一个有效的单词,并且不应该匹配正则表达式,因为左连接元音的右侧没有辅音。
我知道所有的 Unicode 范围——辅音、独立元音、左连接元音等的 Unicode 范围。
这是我到目前为止所拥有的:
WordPattern = (
ur'('
ur'[\u0985-\u0994]|'
ur'[\u0995-\u09B9]|'
ur'[\u0995-\u09B9(\u09BE|[\u09C0-\u09C4])]|'
ur'[(\u09BF|\u09C7|\u09C8)\u0995-\u09B9]|'
ur'[(\u09BF|\u09C7|\u09C8)\u0995-\u09B9(\u09BE|[\u09C0-\u09C4])]'
ur')+'
)
它不工作。除了让它工作之外,我还有三个具体问题:
- 我需要将正则表达式拆分为多行,否则代码会看起来很糟糕。我该怎么做呢?
- 我想使用某种字符串替换/模板来“命名”Unicode范围,以提高代码可读性并防止多次输入Unicode范围。
- (这似乎很困难)允许的最小“结构”列表将不得不在以后扩展。有没有办法在正则表达式中设置一种“循环”机制,以便它适用于列表中所有允许的结构?
任何帮助,将不胜感激。这对初学者来说似乎很复杂!