尝试使用Python中的findall()在模式中查找重复的字符串

时间:2012-05-23 17:18:20

标签: python

我正在使用Python编写一个计算单词出现次数的程序。但是,为了计算,程序需要查看句子的开头并且只计算以%开头的句子中的单词。例如,

  

%act:< dur>把花生倒在盘子上

我想算出花生这个词。该程序应该返回1.而

  

* CHI:花生。

将返回0,因为它以*开头 所以我使用了findall()

  

findall('\%。*?'+“peanut”,website_html)

但是,如果一个句子有两个“花生”,那么模式匹配只会返回1.例如

  

%act:< bef>给花生。吃。 < DUR>给花生。 <船尾>给葡萄干

只会返回1.

如何让它返回2?

由于

1 个答案:

答案 0 :(得分:1)

我建议将其分为两部分。即,像:

num_peanuts = 0
for sentence in re.findall(r'(?m)^%.*', website_html):
    num_peanuts = len(re.findall(r'\bpeanut\b', sentence))

我不确定正确的正则表达式选择“以”%“开头的句子 - 这里我假设它是第一个字符为%的行(请注意默认情况下{{ 1}} 匹配换行符;同样,.将regexp置于多行模式; (?m)是一个零宽度断言,匹配行的开头。)。

我还会注意到,与花生相关的正则表达式中的^是为了确保花生这个词不是某个较大词的子串(例如花生)。您可能会也可能不想要它们,具体取决于您的任务细节。