使用正则表达式计算字符串中的重复单词?

时间:2017-08-31 16:55:46

标签: python regex count

我有一个字符串:

"Hi, hi Jane! I'm so. So glad to to finally be able to write - WRITE!! - to you!" 

我需要计算一对重复的单词。

def repetitionEncryption(letter):
    pattern = ???
    regex = re.compile(???)
    return len(re.findall(regex, letter))

感谢您的关注。

2 个答案:

答案 0 :(得分:1)

请注意,问题已被社区标记为重复(但问题不正确)。我改变它以反映正确的。

有一个类似的question用JavaScript标记,但需要对python进行一些修改。

import re

text = "Hi, hi Jane! I'm so. So glad to to finally be able to write - WRITE!! - to you!"
repeats = re.findall(r'\b(\w+)\b(?=.*\b\1\b)', text, re.I)
print(repeats)
['Hi', 'so', 'to', 'to', 'to', 'write']

repeats = list(map(str.lower, repeats))

现在,创建一个计数器。

from collections import Counter

c = Counter(repeats)
print(c)
Counter({'Hi': 1, 'so': 1, 'to': 3, 'write': 1})

或者,更原始:

r_set = set(repeats)
c = {w : repeats.count(w) for w in r_set} 
print(c)
{'hi': 1, 'so': 1, 'to': 3, 'write': 1}

键的值是重复次数。如果'Hi'的值为1,则表示'Hi'发生了两次。等等。

正则表达式是

\b(\w+)\b(?=.*\b\1\b)

详情

  • \b - 字边界
  • (\w+) - 抓取一个单词组
  • \b - 字边界
  • (?=.*\b\1\b) - 前瞻,由...组成
    • .*任何
    • \b\1\b在第一组中捕获的同一个词。在此,\1是对第一组的引用。

答案 1 :(得分:0)

一个建议是将句子分成数组并比较数组中的每个项目。你不会使用正则表达式。使用正则表达式,您需要提前了解您正在寻找的内容。假设您想知道“简”在句子中的次数。