这是原始的正则表达式,可以正常工作:
regex = r"(https:\/\/www\.snopes+...+?)(&)"
matches = re.findall(regex, soup, re.MULTILINE)
我决定我想用一个变量替换“ snopes”,所以我创建了下面的代码,该代码不起作用:
fact_checker = "snopes"
regex1 = 'r"(https:\/\/www\.'
regex2 = '+...+?)(&)"'
regex3 = regex1 + fact_checker + regex2
matches = re.findall(regex3, soup, re.MULTILINE)
regex和regex3如何不同?当我将它们打印出来时,它们看起来一样。
答案 0 :(得分:2)
您经常犯一个错误,即假设r
前缀是值的一部分。它不是;它只是告诉Python解释器以下字符串中使用了哪种引号。 (也许与0.0L
是C中的数字的方式进行比较;后缀L
表示它是存储类型long
的数字。)
无论如何,惯用的方式做自己想要的事是
regex = r"(https://www\.{}+...+?)(&)".format(fact_checker)
(斜杠在正则表达式中没有特殊含义,因此我删除了多余的反斜杠。正则表达式无疑可以得到改进。)
答案 1 :(得分:0)
我知道了:
regex1 = r"(https:\/\/www\."
regex2 = r"+...+?)(&)"
regex3 = regex1 + fact_checker + regex2