【问题标题】:Using any in re.findall - Python在 re.findall 中使用任何 - Python
【发布时间】:2012-08-13 12:16:35
【问题描述】:

我在 python 中编写了一个脚本来告诉 new 中的哪些数字在 new 的前 10 个数字中。我知道它看起来比它更复杂,这与我稍后尝试对脚本执行的操作有关。现在,虽然我试图弄清楚为什么它为列表“新”中的每个数字打印“每个”,而不仅仅是第十个之前的数字。

这是我的代码:

i = 10
new = ['A lot of numbers'] 

for each in re.findall(r'[0-9]+', new):
    if any(each for x in (re.findall(r'[0-9]+', new)[0:i])):
        print each
    else:
        pass

【问题讨论】:

  • 这会抛出 TypeError 因为 new 是一个列表。你用的是什么版本的python?
  • 您能否更清楚地解释您要做什么,可能包括num 变量的真实示例?

标签: python regex list variables numbers


【解决方案1】:

你需要在你的生成器表达式中以某种方式引用 x,否则你只是检查any([each, each, each, ....]),如果每个计算结果为真,它将总是计算为真(它总是会为你的正则表达式)。我怀疑你想要这样的东西,它测试前 i 项中的任何一项是否等于每个:

if any(x==each for x in (re.findall(r'[0-9]+', new)[0:i])):

【讨论】:

    【解决方案2】:

    如果您要查找 new 中的前 10 个字母,您的意思是

    if any(each for x in (re.findall(r'[0-9]+', new[0:i]))):
    

    而不是:

    if any(each for x in (re.findall(r'[0-9]+', new)[0:i])):
    

    另外,你的意思是new 是一个列表吗?无法将列表传递给 findall

    最后,请注意,您永远不需要 else: pass 语句,if 本身就可以正常工作。

    【讨论】:

      【解决方案3】:

      如果 new 是一个字符串列表,其中一些是“123”之类的数字,并且您想要这些数字中的前 10 个:

      allnumbers = [x for x in new if re.match("[0-9]+", x)]
      first10numbers = allnumbers[:10]
      

      (对于 Python 2.x)

      如果 new 是一个字符串,你会有

      allnumbers = [x for x in re.findall("[0-9]+", x)]
      

      我不确定你稍后会用这个做什么,但如果你只是想打印后面的数​​字,只有当它们出现在前 10 个数字中时,你可能会这样:

      for number in [x for x in allnumbers if x in first10numbers]:
          print number
      

      【讨论】:

      • 我猜你的意思是在最后一行打印数字而不是打印 x
      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多