Python 用于过滤列表理解中正则表达式搜索的Walrus算子

Python 用于过滤列表理解中正则表达式搜索的Walrus算子,python,regex,list,walrus-operator,Python,Regex,List,Walrus Operator,我有一个Python字符串列表。我想对每个元素进行正则表达式搜索,只过滤那些我设法捕获正则表达式组的元素。我想我只能使用Python3.8中的walrus操作符进行一次正则表达式搜索。到目前为止,我已经: attacks = [match for attack in attacks if (match := re.search(r"(\([0-9]+d[\s\S]+\))", attack).group() is not None)

我有一个Python字符串列表。我想对每个元素进行正则表达式搜索,只过滤那些我设法捕获正则表达式组的元素。我想我只能使用Python3.8中的walrus操作符进行一次正则表达式搜索。到目前为止,我已经:

attacks = [match
           for attack in attacks
           if (match := re.search(r"(\([0-9]+d[\s\S]+\))", attack).group() is not None)]
逻辑是:如果正则表达式搜索返回了任何内容,我将获取找到的组,这意味着它不是None。问题是,bevahiour很奇怪-我可以
print()。我做错了什么

编辑:

完整代码:

text = "Speed 30 ft. Melee short sword +3 (1d6+1/19-20) Ranged light crossbow +3 (1d8/19-20)  Special Attacks sneak attack +1d6 Spell-Like Abilities (CL 1st) "
if attacks:
    attacks = attacks.group().split(")")
    attacks = [match
               for attack in attacks
               if (match := re.search(r"(\([0-9]+d[\s\S]+\))", attack).group() is not None)]
删除
。group()不是None
。如果没有任何匹配项,
re.search()
返回
None
并引发异常:

import re


attacks = ['(7dW)', 'xxx']
attacks = [match
           for attack in attacks
           if (match := re.search(r"(\([0-9]+d[\s\S]+\))", attack))]

print(attacks)
印刷品:

[<re.Match object; span=(0, 5), match='(7dW)'>]
[]
删除
。group()不是None
。如果没有任何匹配项,
re.search()
返回
None
并引发异常:

import re


attacks = ['(7dW)', 'xxx']
attacks = [match
           for attack in attacks
           if (match := re.search(r"(\([0-9]+d[\s\S]+\))", attack))]

print(attacks)
印刷品:

[<re.Match object; span=(0, 5), match='(7dW)'>]
[]

此代码中的任何内容都不会导致程序结束,因此之后的任何代码都必须按预期运行。请显示一个。您的“完整代码”显然不是完整代码。此代码中的任何内容都不会导致程序结束,因此之后的任何代码都必须按预期运行。请出示a。您的“完整代码”显然不是完整代码。