在Python3中,许多方法都返回迭代器或生成器对象(而不是python2中的列表或其他重型对象)。
但是,我发现拆分字符串仍会返回list
而不是generator
或iteator
:
~$ python3
Python 3.2.2
(...)
>>> type('a b c d'.split())
<class 'list'>
是否存在使用generator
或iterator
分割字符串的内容?
(我知道我们可以自己拆分它并编写好的生成器函数。我很好奇是否有标准库或语言中的东西来执行此操作)
答案 0 :(得分:3)
从re module =&gt;中查看re.finditer
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))
答案 1 :(得分: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]