python - findall() 和使用带有迭代器的 for 循环来查找模式匹配之间有什么区别

标签 python regex

我用它来计算文本中的句子数:

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/

相关文章:

python - __init__.py 似乎不起作用

python:将(字符串)集列表转换为 scipy csr_matrix

JSON 中的 Javascript 正则表达式

regex - scala中的表达式评估器(可能带有占位符?)

regex - 使用 bash 从 txt 文件中获取第一个整数

Python Selenium Safari,禁用日志记录

python - 通过 Thrift 在 HBase 中的 mutateRow() 需要未记录的第四个参数

java - 正则表达式抛出 StackOverFlow 错误

regex - 为 Cron 语句创建正则表达式

java - 使用 Python 或 Java 自动化 HP Quality Center