【发布时间】:2019-03-01 16:51:59
【问题描述】:
我有一个字符串列表。
考虑下面的代码:
import re
mylist = ["http://abc/12345?abc", "https://abc/abc/2516423120?$abc$"]
r = re.compile("(\d{3,})")
result0 = list(filter(r.findall, mylist)) # Note 1
print(result0)
result1 = r.findall(mylist[0])
result2 = r.findall(mylist[1])
print(result1, result2)
结果是:
['http://abc/12345?abc', 'https://abc/abc/2516423120?$abc$']
['12345'] ['2516423120']
为什么我们得到的结果会有所不同?
【问题讨论】:
-
filter只是检查元素是否与正则表达式匹配,而不是返回 findall 的结果。使用地图而不是过滤器,结果将是相同的 -
filter只是将表达式传递给findall,由于它返回一个非空列表,过滤器让原始文本通过。 -
好的,我现在明白了!谢谢大家
标签: python regex python-3.x list