-1

我有一个字符串列表,我想从元素中提取模式。

例如,给定 list["A 12345bcd", "BYT 676 CCC"]和 pattern r'\d\d\d\d\d',我想获得: ["12345", ""]

我知道没有它怎么办,但我想使用 walrus operator :=

我试过了:

[(m:=re.search(r'\d\d\d\d\d', x), m.group() if m else "") for x in ["A 12345bcd", "BYT 676 CCC"]]

但结果是:

[(<re.Match object; span=(2, 7), match='12345'>, '12345'), (None, '')]

因此,不是我想要的

4

2 回答 2

3

这是一个元组:

(m:=re.search(r'\d\d\d\d\d', x), m.group() if m else "")

这是group/empty 条件表达式,并m :=在早期进行了适当的评估:

m.group() if (m := re.search(r'\d\d\d\d\d', x)) else ""
于 2022-01-15T10:05:23.670 回答
1
import re

l = ["A 12345bcd", "BYT 676 CCC"]

result = [(res := re.search(r"\d{5}", x)) and res.group() or "" for x in l]

print(result)

输出:

['12345', '']
于 2022-01-15T10:06:59.850 回答