Python 用于过滤列表理解中正则表达式搜索的Walrus算子
我有一个Python字符串列表。我想对每个元素进行正则表达式搜索,只过滤那些我设法捕获正则表达式组的元素。我想我只能使用Python3.8中的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)
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。您的“完整代码”显然不是完整代码。