正则表达式不将匹配项识别为 True



我有一个包含文本数据的数据帧,我正在尝试清理内容值为空的行。我有一行的内容列如下所示:

articles.loc[197040, 'content']
'     '

我尝试使用 .isnull(( 清理它,但这无法识别空字符串。所以我求助于正则表达式并尝试:

nothing = re.compile(r'W{1,}')
articles = articles[articles['content'] != nothing]

但这留下了空的文章。如果我尝试:

'     ' == nothing

我得到False.但是正则表达式测试器似乎表明这应该有效。使用r'W*'也会返回False

其他无意义的字符串仍然存在问题---例如,当尝试其他正则表达式组合时---逗号和空格的混合。

感谢您的任何帮助。

编辑:

这里也没有认识到等效性:

'what.' == re.compile(r'w*.')
False

或在这里:

'6:45' == r'[^A-Z]{1,}'
False

等等等等。

您可以使用内置isspace解决此问题,如果字符串中只有空格字符并且至少有一个字符,则返回 true。


演示,也过滤空字符串:

import pandas as pd
articles =  pd.DataFrame({'content' : ['foo','bar','   ','foo','    ','']})    
articles = articles[(~articles['content'].str.isspace()) & (articles['content'] != '')]
>>> articles
content
0     foo
1     bar
3     foo

要检查正则表达式是否与字符串匹配,您必须使用match方法,而不是检查相等性。你基本上是在比较一个字符串和一个模式对象,当然,模式对象是不相等的。试试这个:

nothing.match('    ') # out: <_sre.SRE_Match object; span=(0, 4), match='    '>
x.match(' , , ,') # out: <_sre.SRE_Match object; span=(0, 6), match=' , , ,'>

最新更新