创建正则表达式时面临挑战

时间:2019-05-03 08:49:54

标签: python regex

我需要构造一些正则表达式。我遇到以下列出的问题

  1. 查找所有以a开头的单词,所有字母均为字母 订购。 我尝试过-^[a]a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*$ 但它不起作用。

    输入:

    • ab-无法匹配
  2. 查找所有不包含元音和y的单词。 我尝试过-[^aeiouy]+$ 但这不起作用

    输入:

    • abc-不匹配
    • bc-匹配
    • sgpty-不匹配
    • sgpt-匹配
  3. 查找所有以z开头且包含至少2个y的单词。 我尝试过-r"\b[z].*(y.*?){2}\b" 但它不能正常工作。它匹配作品但不打印 正确(我只是从findAll()结果中打印匹配项,什么也没有 其他)

    输入:

    • zygapophyses-仅匹配yses,但仅打印
    • zygapophysis-匹配但仅打印ysis
  4. 查找由交替的元音和辅音组成的所有单词(在 任意顺序)且长度至少为12。 我尝试过-^(([aeiou][^aeiou])+|([^aeiou][aeiou])+)$ 但不知道如何测试12个或更多字符的长度。

    ^(([aeiou][^aeiou])+|([^aeiou][aeiou])+){12,}$对我不起作用。

    输入:

    • witenagemote-匹配
    • 充满活力-匹配
    • vizirate-不匹配
    • 高度-匹配

1 个答案:

答案 0 :(得分:1)

这是第二个问题的一个例子。您的正则表达式足够好。

import re
def find_word(word):
    if re.match("[^aeiouy]+$",word):
        print (word, "DOESN'T CONTAIN VOWELS OR Y")
    else:
        print (word, "CONTAINS VOWELS OR Y")

find_word("abc")
find_word("bc")
find_word("sgpty")
find_word("sgpt")

输出:

abc CONTAINS VOWELS OR Y
bc DOESN'T CONTAIN VOWELS OR Y
sgpty CONTAINS VOWELS OR Y
sgpt DOESN'T CONTAIN VOWELS OR Y

对于第三个问题,我也使用您的正则表达式:

def find_z(string) : 
    regex = re.compile(r"\b[z].*(y.*?){2}\b")  
    for st in string.split():
        match_object = regex.findall(st) 
        if len(match_object) != 0 : 
            for word in match_object : 
                print(st)
        else: 
            print("Not match")

输出:

zygapophyses
zygapophysis
Not match
Not match