我用它来计算文本中的句子数:
fileObj = codecs.open( "someText.txt", "r", "utf-8" )
shortText = fileObj.read()
pat = '[.]'
for match in re.finditer(pat, shortText, re.UNICODE):
nSentences = nSentences+1
有人告诉我这样更好:
result = re.findall(pat, shortText)
nSentences = len(result)
有区别吗?他们不做同样的事情吗?
最佳答案
第二个可能会快一点,因为迭代完全在 C 中完成。快多少?在我的测试中大约有 15%(在 'a' * 16
中匹配 'a'
),尽管随着正则表达式变得更复杂并占据更大的比例,这个百分比会变小的运行时间。但它会使用更多内存,因为它实际上会为您创建一个列表。不过,假设您没有大量的匹配项, 内存也不会太多。
至于我更喜欢哪个,我有点喜欢第二个的简洁性,尤其是当组合成一个语句时:
nSentences = len(re.findall(pat, shortText))
关于python - findall() 和使用带有迭代器的 for 循环来查找模式匹配之间有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102142/