正则表达式命令没有找到指定的字符串

时间:2017-06-26 19:58:39

标签: python regex

我正在尝试构建一个小型爬虫以获取Twitter句柄。我不能为生活解决我一直存在的错误。对于re.search来说,这似乎是完全相同的错误。 re.findall和re.finditer。错误为TypeError: expected string or buffer.

数据的结构如下:CSV:

30,"texg",@handle,,,,,,,,

请注意,打印行工作正常,test = re ....在到达打印行之前出错。

def read_urls(filename):
    f = open(filename, 'rb')
    reader = csv.reader(f)
    data = open('Data.txt', 'w')
    dict1 = {}
    for row in reader:
        print row   
        test = re.search(r'@(\w+)', row)
        print test.group(1)

此外,我还没有在许多不同的线程中解决这个问题,但解释的所有解决方案都没有奏效。看起来似乎无法读取行调用...

2 个答案:

答案 0 :(得分:1)

仔细查看您的代码:

for row in reader:
    print row   
    test = re.search(r'@(\w+)', row)
    print test.group(1)

请注意,row是列表而不是字符串,并且根据搜索文档:

  

扫描字符串,查找正则表达式模式生成匹配项的第一个位置,并返回相应的MatchObject实例。 如果字符串中没有位置与模式匹配,则返回None; 请注意,这与在字符串中的某个点找到零长度匹配不同。

这意味着您应该创建一个字符串并检查test是否不是None

for row in reader:
    print row   
    test = re.search(r'@(\w+)', ''.join(row))
    if test:
        print test.group(1)

同时打开没有b标志的文件,如

f = open(filename, 'r')

答案 1 :(得分:0)

您通过阅读器运行文件后尝试阅读列表。

import re

f = open('file1.txt', 'r')
for row in f:
    print(row)
    test = re.search(r'@(\w+)', row)
    print(test.group(1))
f.close()

https://repl.it/JCng/1

如果您想使用CSV阅读器,可以遍历列表。