首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海象运算符,多重赋值

海象运算符,多重赋值
EN

Stack Overflow用户
提问于 2021-04-04 12:04:52
回答 1查看 109关注 0票数 1

我有以下while循环:

代码语言:javascript
复制
import re
line = "This is my line"
reg = re.compile('(\S+)\s*(.*)')
while line:
    token, line = reg.match(line).groups()
    print (token)

可以将其放入海象运算符表达式中吗?它看起来像not natively,但我想知道它是否可以用某种类似于黑客的方式来完成,也许可以使用多个:=

代码语言:javascript
复制
while (token, line := reg.match(line).groups()):
    print (token)

这到底有没有可能呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-04 12:23:52

我认为你能做的最接近的事情就是这样:

代码语言:javascript
复制
while r := reg.match(line).groups() and (token := r[0], line := r[1]) and line:
    print(token)

但是你为什么要这么做呢?这是糟糕的代码。不要这样做。你问题中的原始代码更好。

也就是说,您的标记看起来像是由空格分隔的非空格字符组-请注意,尽管\s*不可能匹配任何空格,但这只发生在输入的末尾,因为\S+贪婪地匹配尽可能多的非空格字符。如果这确实是你想要做的,那么你应该这样写:

代码语言:javascript
复制
for token in line.split():
    print(token)

或者,如果你坚持使用正则表达式,你应该这样写:

代码语言:javascript
复制
reg = re.compile(r'\S+')

for token in reg.findall(line):
    print(token)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66937923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档