我有以下while循环:
import re
line = "This is my line"
reg = re.compile('(\S+)\s*(.*)')
while line:
token, line = reg.match(line).groups()
print (token)可以将其放入海象运算符表达式中吗?它看起来像not natively,但我想知道它是否可以用某种类似于黑客的方式来完成,也许可以使用多个:=。
while (token, line := reg.match(line).groups()):
print (token)这到底有没有可能呢?
发布于 2021-04-04 12:23:52
我认为你能做的最接近的事情就是这样:
while r := reg.match(line).groups() and (token := r[0], line := r[1]) and line:
print(token)但是你为什么要这么做呢?这是糟糕的代码。不要这样做。你问题中的原始代码更好。
也就是说,您的标记看起来像是由空格分隔的非空格字符组-请注意,尽管\s*不可能匹配任何空格,但这只发生在输入的末尾,因为\S+贪婪地匹配尽可能多的非空格字符。如果这确实是你想要做的,那么你应该这样写:
for token in line.split():
print(token)或者,如果你坚持使用正则表达式,你应该这样写:
reg = re.compile(r'\S+')
for token in reg.findall(line):
print(token)https://stackoverflow.com/questions/66937923
复制相似问题