给定一个来自此链接的tweet数据集,其中content
列如下:
我希望添加一个新专栏来确定推文是否提到了特朗普。正则表达式模式(^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$)
似乎行得通,但我不太理解。我用下面的代码进行了测试:
Test1给出匹配后的输出:
txt1 = "anti-Trump protesters"
re.search("(^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$)", txt1)
:
<_sre.SRE_Match object; span=(4, 11), match='-Trump '>
Test2返回None,因为它没有按照预期匹配:
txt2 = 'I got Trumped'
re.search("(^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$)", txt2)
有人可以帮我解释一下这个模式。万分感谢。
(^|[^A-Za-z0-9])
部分有"|
",即"或"。左边的^
是字符串的开始。右边的[^A-Za-z0-9]
匹配非字母或数字的任何字符。简而言之,当"Trump"位于字符串的开头,或者前面有一个非字母数字字符时,它会匹配。
([^A-Za-z0-9]|$)
遵循类似的模式,左侧匹配非字母或数字的任何字符。右边,$
匹配字符串的末尾。同样,当"Trump"位于字符串末尾或后跟非字母数字字符时,它也会匹配。
所以,底线是,它匹配位于字符串开头或前面有任何非字母数字字符的"Trump",也匹配位于字符串末尾或后面有非字母数字字符的"Trump"。