为什么在尝试使用正则表达式时出现错误?

时间:2019-06-07 01:00:00

标签: python regex

将re.sub()用于字符串对象,我收到TypeError:预期的字符串或类似字节的对象。

我正在尝试清理一堆已下载并存储在csv文件中的推文。 csv文件仅包含两列:“否”列,其显示每个推文的编号,以及“正文”。我正在使用re.sub()从推文正文中删除所有“提及”。但是该命令返回错误。以下是我的代码和错误:

# Convert to list
data = df.content.values.tolist()

# Remove mentions
data = [type(sent) for sent in data[:10]]
print(data)
data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
[<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>]

正如您在上面看到的,我仔细检查并确保regex命令的输入是字符串。但是,我收到的错误却相反


TypeError                                 Traceback (most recent call last)
<ipython-input-11-bd1250ebb94b> in <module>
      6 data = [type(sent) for sent in data[:10]]
      7 print(data)
----> 8 data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
      9 

<ipython-input-11-bd1250ebb94b> in <listcomp>(.0)
      6 data = [type(sent) for sent in data[:10]]
      7 print(data)
----> 8 data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
      9 

~\Anaconda3\lib\re.py in sub(pattern, repl, string, count, flags)
    190     a callable, it's passed the Match object and must return
    191     a replacement string to be used."""
--> 192     return _compile(pattern, flags).sub(repl, string, count)
    193 
    194 def subn(pattern, repl, string, count=0, flags=0):

TypeError: expected string or bytes-like object

2 个答案:

答案 0 :(得分:1)

使用type来检查您的值是否为字符串是可以的,但是如果要将结果重新分配给data,则可以在要对类型进行正则表达式替换时将其应用于弦本身。

无论如何,您可以使用re的内置函数来代替使用pandas

df['content'].str.replace(r'\s+', ' ')

答案 1 :(得分:0)

实际上类型是“类型”而不是“ str”类型。

您可以通过以下操作轻松获得类型名称:

data = [type(sent).__name__ for sent in data[:10]]