正则表达式Python。根据输入匹配文本文件中包含1个或多个元音的单词?

时间:2014-12-02 19:12:59

标签: python regex

我有一个.txt文件,其目标是使用正则表达式查找包含n个元音的文件中的所有单词。

import re
def main():
    n = int(input("Enter a number: "))
    file = input("Enter file name: ")
    f = open(file,'r')
    print(re.findall("[A-Za-z]*[AEIOUaeiou]"+str({n})+"[b-df-hj-np-tv-z]*",f.read()))
    f.close()

main()

当我输入1时,我用元音得到每个单词。但是当我输入2时,我只会得到含有元音的单词,例如单词本。这种情况发生在n的数字上。我已经尝试了很多方法而且无法弄明白。

我需要帮助才能找到一个有2个元音(或更多)的单词,这些元音不会聚集在一起。 例如,对于n = 2,['these','look','hello']

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

正则表达式不是解决此问题的好方法。我建议:

vowels = 'AEIOUaeiou'
sum(some_string.count(v) for v in vowels)

这将返回some_string中的元音数量。

这个正则表达式:

[A-Za-z]*[AEIOUaeiou]"+str({n})+"[b-df-hj-np-tv-z]*

匹配可能以a-zA-Z开头的所有字符串,然后必须有元音,然后是字符串本身,然后它可能有[b-df-hj-np-tv-z]

答案 1 :(得分:0)

已编辑 - 我现在想了解你的用例,所以相应地重新调整了这个功能。

import re

def countVowelClumps(text):
  return len(re.findall(r'([AEIOUaeiou])', text))

现在这只是一个严格的元音数。

答案 2 :(得分:0)

特殊n

re.findall("\s?(" + "[A-Za-z]*[AEIOUaeiou]"*n + "[b-df-hj-np-tv-z]*)", f.read())

例如

>>> re.findall("\s?(" + "[A-Za-z]*[AEIOUaeiou]"*2 + "[b-df-hj-np-tv-z]*)", "bool sjalkdj tehere")
['boo', 'tehere']
>>> re.findall("\s?(" + "[A-Za-z]*[AEIOUaeiou]"*3 + "[b-df-hj-np-tv-z]*)", "bool sjalkdj tehere")
['tehere']

答案 3 :(得分:0)

这将找到包含n个或更多元音的单词(如果我没有记错的话)。那是你要的吗? (你的问题的标题似乎表明了这一点)

import re
a = ("Nx Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do"
    " eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
    " veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
    " commodo consequat. Duis aute irure dolor in reprehenderit in voluptate"
    " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint"
    " occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
    " mollit anim id est laborum XXX")

n = 4
rx = re.compile(r'(\w*([aeiou]\w*){%s})' % n)
found = []
for block in re.findall(rx, a):
    found.append(block[0])
print found

输出:

['consectetur', 'adipiscing', 'eiusmod', 'incididunt', 'aliqua',
 'exercitation', 'aliquip', 'consequat', 'reprehenderit', 'voluptate',
 'pariatur', 'occaecat', 'cupidatat', 'officia']