我有一个.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']
非常感谢任何帮助。
答案 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']