如何使用正则表达式在一个单词的字符串列表中计算带有一个音节的单词

时间:2015-02-24 01:41:28

标签: regex list python-2.7

我试图用一个很长的文字来计算有一个音节的单词数量。这被定义为具有零个或多个辅音,然后是一个或多个元音,后跟零个或多个辅音的单词。 文本已经小写,并分成单个单词串的列表。然而,每当我尝试使用RE来获取计数时,我都会收到错误,因为该对象是一个列表而不是字符串。 我如何在列表中执行此操作?

f = open('pg36.txt')
war = f.read()
warlow = war.lower()
warsplit = warlow.split()
import re
def syllables():
  count = len(re.findall('[bcdfghjklmnpqrstvwxyz]*[aeiou]+[bcdfghjklmnpqrstvwxyz]*', warsplit))
  return count
  print (count)
syllables()

2 个答案:

答案 0 :(得分:2)

因为您尝试对列表使用findall函数而不是字符串,因为findall仅对字符串起作用。所以你可以试试下面的内容。

import re
f = open('file')
war = f.read()
warlow = war.lower()
warsplit = warlow.split()
def syllables():
    count = 0
    for i in warsplit:
        if re.match(r'^[bcdfghjklmnpqrstvwxyz]*[aeiou]+[bcdfghjklmnpqrstvwxyz]*$', i):
            count += 1
    return count
print syllables()
f.close() 

直接在warlow变量上使用findall函数。

import re
f = open('file')
war = f.read()
warlow = war.lower()
print len(re.findall(r'(?<!\S)[bcdfghjklmnpqrstvwxyz]*[aeiou]+[bcdfghjklmnpqrstvwxyz]*(?!\S)', warlow))
f.close()

答案 1 :(得分:0)

尝试使用此正则表达式:

srcHeaderRow