Python正则表达式使用re.sub公司有多种图案

2024-09-24 06:29:44 发布

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

我尝试使用Python RegEx re.sub删除单词倒数第二个元音[aeiou]之前的冒号,如果倒数第二个元音(从结尾开始)前面是另一个元音。在

所以从单词的末尾算起,冒号必须在第三和第四个元音之间。在

因此,给出的第一个示例将如下所示w4:32ny1h。在

we:aanyoh > weaanyoh    # w4:32ny1h
hiru:atghigu > hiruatghigu
yo:ubeki > youbeki

下面是我尝试使用的RegEx语句,但我无法使其工作。在

^{pr2}$

Tags: re示例结尾单词regexwe末尾元音
3条回答

不确定是否要完全忽略辅音;此正则表达式将。其他方面与杰夫的相似

import re

tests = [
    'we:aanyoh',
    'hiru:atghigu',
    'yo:ubeki',
    'yo:ubekiki',
    'yo:ubek'
]

for word in tests:
    s = re.sub(r'([^aeiou]*[aeiou][^aeiou]*):((?:[^aeiou]*[aeiou]){3}[^aeiou]*)$', r'\1\2', word)
    print '{} > {}'.format(word, s)

你不是有太多的括号(和其他额外的东西)吗?公司名称:

word = re.sub(ur"([aeiou]):(([aeiou][^aeiou]*){3})$", ur'\1\2', word)

您声明您的目标是一个单词而不是一行,因此首先设置锚点以仅处理单词:

\b[regex will go here]\b
^                      ^     assert a word boundary

接下来,一个冒号前接一个[aeiou],在冒号后面的部分还有两个[aeiou]。我假设与案件无关?在

^{pr2}$

Demo

(注意[^aeiou\W]的用法是辅音字母、数字和u,但不是其他字符Demo。)

Python演示:

import re

tests={
    'matches':[
        'we:aanyoh',
        'hiru:atghigu',
        'yo:ubeki'
        ],
    'no match':[
        'wz:ubeki',
        'we:a anyoh',
        'yo:ubek',
        'hiru:atghiguu'
    ]    
}

for k, v in tests.items():
    print k
    for e in v:
        s=re.sub(r'(?i)(\b\w+[aeiou]):((?:[aeiou][^aeiou\s\W]*){3}\b)', r'\1\2', e)
        print '\t{} > {}'.format(e, s)

印刷品:

matches
    we:aanyoh > weaanyoh
    hiru:atghigu > hiruatghigu
    yo:ubeki > youbeki
no match
    wz:ubeki > wz:ubeki
    we:a anyoh > we:a anyoh
    yo:ubek > yo:ubek
    hiru:atghiguu > hire:atghiguu

这将只处理带有单个冒号的单词。如果要匹配具有多个冒号但具有相同模式的单词,请更改LH模式以使字符类包含一个冒号和一个不是\b的锚点。在

示例:(?i)(^[\w:]+[aeiou]):((?:[aeiou][^aeiou\s\W]*){3}\b)

相关问题 更多 >