为什么这两个正则表达式(一个带有变量)不相等?

时间:2018-12-29 07:19:39

标签: python regex

这是原始的正则表达式,可以正常工作:

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如何不同?当我将它们打印出来时,它们看起来一样。

2 个答案:

答案 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