正则表达式 (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) 含义

Regular expression (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) meaning

给定来自 this link 的推文数据集,其中有一个 content 列,如下所示:

我希望增加一个新的专栏来确定这条推文是否提到了特朗普。正则表达式模式 (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) 似乎可行,但我不太了解。我已经用下面的代码进行了测试:

测试 1 给出了匹配的输出:

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 return 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”,如果它也是字符串结尾的也匹配或后跟一个非字母数字字符。