正则表达式 (^|[^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]|$) 含义的主要内容,如果未能解决你的问题,请参考以下文章