这个问题是针对python3.6+的(但对于其他读者,请随意回答低级Python)。你知道吗
我想从每个匹配正则表达式的字符串中提取一个子字符串。你知道吗
假设我有以下几点:
a = ['v-01-001', 'v-01-002', 'v-02-001', 'v-02-002', 'v-02-003', 'v-03-001']
我要匹配v-02-\d\d\d
的所有字符串的最后3位,即:
['001', '002', '003']
我天真的尝试:
[x[1] for x in list(map(lambda i: re.search(r'v-02-(\d\d\d)', i), a)) if x]
你能想出更优雅的吗?你知道吗
谢谢
四种方法。你知道吗
第一个是常规的“ole循环”:
对列表中同一正则表达式的两次调用中的第二次调用:
三是使用
map
:最后,您可以使用
.join
展平列表,然后使用findall
:或者,使用
\n
和re.M
对两个\b
:如果我在写这段代码的话,我可能会按照同样的顺序来写。你知道吗
我想,在旁观者眼中,被认为是更优雅的。我认为最后一个更优雅。
您还可以跳过regex并使用Python的string方法:
如果在这种情况下,这可能是最快的。你知道吗
2019年12月,将有一个更优雅的选择。如PEP 572中所定义的,您将能够使用赋值语句,以便在一个步骤中分配匹配项并测试匹配项:
你可以这样做:
输出
您还可以使用
finditer
:输出
相关问题 更多 >
编程相关推荐