【问题标题】:Regular Expressions: Search in list in python3正则表达式:在 python3 中的列表中搜索
【发布时间】: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']

为什么我们得到的结果会有所不同?

Code snippet

【问题讨论】:

  • filter 只是检查元素是否与正则表达式匹配,而不是返回 findall 的结果。使用地图而不是过滤器,结果将是相同的
  • filter 只是将表达式传递给findall,由于它返回一个非空列表,过滤器让原始文本通过。
  • 好的,我现在明白了!谢谢大家

标签: python regex python-3.x list


【解决方案1】:

我不确定你期望filter 做什么,但它在这里的作用是返回一个迭代器,它对mylist 的所有元素x 进行迭代,其中bool(r.findall(x))False。仅当r.findall(x) 返回一个空列表时才会出现这种情况,即正则表达式与字符串不匹配,因此这里result0 包含与mylist 相同的值。

【讨论】:

    猜你喜欢
    • 2011-04-08
    • 1970-01-01
    • 2021-02-09
    • 2010-09-23
    • 2014-06-06
    • 2013-11-02
    • 1970-01-01
    • 2020-06-01
    • 2013-05-24
    相关资源
    最近更新 更多