5

在 Python3 中,许多方法都返回迭代器或生成器对象(而不是 Python2 中的列表或其他重对象)。

但是,我发现拆分字符串仍然返回list而不是generatoror iteator

~$ python3
Python 3.2.2
(...)
>>> type('a b c d'.split())
<class 'list'>

是否有使用generatoror分割字符串的内置函数iterator

(我知道我们可以自己拆分它并编写好的生成器函数。我很好奇标准库或语言中是否有东西可以做到这一点)

4

2 回答 2

5

查看re.finditerre 模块 => Python Docs

简单来说:

""" 返回一个迭代器,在字符串中的 RE 模式的所有非重叠匹配上产生匹配对象。从左到右扫描字符串,并按找到的顺序返回匹配。空匹配包含在结果中,除非它们触摸另一场比赛的开始。"""

我认为它会做你需要的。例如:

import re
text = "This is some nice text"
iter_matches = re.finditer(r'\w+', text)
for match in iter_matches:
    print(match.group(0))
于 2012-05-23T23:01:08.630 回答
0

基于正则表达式的答案很小,但对于那些还是新手并想写一个的人来说,这是一种方法:

import string

def gsplit(s,sep=string.whitespace):
    word = []

    for c in s:
        if c in sep:
            if word:
                yield "".join(word)
                word = []
        else:
            word.append(c)

    if word:
        yield "".join(word)
       

text = "This is some nice text"

print(type(gsplit(text)))

for i in (gsplit(text)):
    print(i)
<class 'generator'>
This
is
some
nice
text

[Program finished]
于 2021-03-16T10:54:18.790 回答