使用RE在列表中搜索时预期的字符串或类似字节的对象

时间:2019-07-13 05:15:59

标签: python regex type-mismatch

我正在使用RE在列表中进行搜索,但收到类型不匹配错误,我无法弄清。这是完整的代码。我检查了作为正则表达式出现的r的类型,我认为它可以与字符串一起使用,因为我发现堆栈溢出在这里出现了

import re

i = int(input())
l = []
k = []

for j in range(i):

    l.append(int(input()))    

for a in l:

    n = int(a)

    hd = 0 
    ld = 9
    while n > 0:
        rn = n % 10
        if hd < rn:
            hd = rn
        if ld > rn:
            ld = rn
        n = int(n / 10)

    x = hd*11 + ld*7

    if x > 99:
        x = x - 100

    k.append(x)

cn = 0
r = re.compile("1[0-9]+")
nl = list(filter(r.search, k))
if len(nl) == 2 :
    cn = cn + 1
    type(r)
elif len(nl) > 2:
    cn = cn + 2

我收到此错误:

Traceback (most recent call last):
  File "<ipython-input-13-5ea828f5282e>", line 36, in <module>
    nl = list(filter(r.search, k))
TypeError: expected string or bytes-like object
Traceback (most recent call last):
File "<ipython-input-13-5ea828f5282e>", line 36, in <module>
    nl = list(filter(r.search, k))
TypeError: expected string or bytes-like object

1 个答案:

答案 0 :(得分:0)

就像错误消息所示,您的列表不包含字符串。您可以使用str(number)将数字转换为字符串,然后对结果进行正则表达式匹配,但是在这种情况下,更简单有效的过滤器是过滤掉10以下的数字。(我想这也可以您完全放弃对re的依赖。)