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

Posted

技术标签:

【中文标题】正则表达式 (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) 含义【英文标题】:Regular expression (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) meaning 【发布时间】:2021-11-09 18:34:47 【问题描述】:

给定来自this link 的推文数据集,其中有一个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)

有人可以帮助解释一下这种模式。非常感谢。

【问题讨论】:

您可以查看 regex101 以获取解释:右上角的regex101.com/r/CfhDAe/1,以及一些regex graph 以了解发生了什么 这些链接真的很有帮助,谢谢分享。 这匹配任何包含 Trump 且前后有非字母数字字符的内容 【参考方案1】:

(^|[^A-Za-z0-9]) 部分有|,意思是“或”。左侧,^,是字符串的开头。右侧 [^A-Za-z0-9] 匹配任何不是字母或数字的字符。简而言之,当“Trump”位于字符串的开头或前面有非字母数字字符时,它匹配。

([^A-Za-z0-9]|$) 遵循类似的模式,其中左侧匹配任何不是字母或数字的字符。右侧,$ 匹配字符串的结尾。同样,当“Trump”位于字符串末尾或后跟非字母数字字符时匹配。

因此,最重要的是,它匹配位于字符串开头或前面有任何非字母数字字符的“Trump”,以及匹配如果它也是字符串结尾或后面的字符由非字母数字字符。

【讨论】:

非常清晰详细的解释,非常感谢。

以上是关于正则表达式 (^|[^A-Za-z0-9])Trump([^A-Za-z0-9]|$) 含义的主要内容,如果未能解决你的问题,请参考以下文章

常用正则表达式 总结

正则表达式

正则表达式匹配邮箱格式

常用正则表达式

错误:存储桶名称必须匹配正则表达式“^[a-zA-Z0-9.\-_]1,255$”

常用正则表达式