我正在尝试创建一个测试来验证链接是否在网页上呈现。
我不理解我在这个断言测试中做错了什么:
self.assertRegexpMatches( response.content, r'<a href="/questions/?sort=elite" class="on" title="Staff Selected Questions">elite</a>')
我知道标记在页面上,因为我从response.content
复制了它我尝试在Python shell中使用正则表达式:
In [27]: links = """<div class="tabsA"><a href="/questions/?sort=active" title="Most recently updated questions">active</a><a href="/questions/?sort=newest" title="most recently asked questions">newest</a><a href="/questions/?sort=hottest" title="most active questions in the last 24 hours">hottest</a><a href="/questions/?sort=mostvoted" title="most voted questions">most voted</a><a href="/questions/?sort=elite" class="on" title="Staff Selected Questions">elite</a></div>"""
In [28]: re.search(r'<a href="/questions/?sort=elite" class="on" title="Staff Selected Questions">elite</a>', links)
出于某种原因,它们也无法正常工作。
如何创建正则表达式以使其有效?
答案 0 :(得分:8)
为什么你在这里使用正则表达式?绝对没有理由。你只是匹配一个简单的字符串。使用:
self.assertContains(response, '<a href="/questions/?sort=elite" class="on" title="Staff Selected Questions">elite</a>')
答案 1 :(得分:4)
正则表达式中的?
被解释为?
quantifier(本部分的结尾):
<a href="/questions/?...
因此,引擎永远不会匹配字符串中显示的文字?
,而是匹配该位置的可选/
。用反斜杠逃避它:
<a href="/questions/\?...
答案 2 :(得分:1)
你应该逃避“?
”,因为该符号在正则表达式中具有特殊含义。
>>> re.search(r'<a href="/questions/\?sort=elite" class="on" title="Staff Selected Questions">elite</a>', links)
答案 3 :(得分:0)
? character是一个特殊的RegEx字符,必须进行转义。
以下正则表达式将起作用
<a href="/questions/\?sort=elite" class="on" title="Staff Selected Questions">elite</a>
在
之前注意\可以在这里找到一个搞乱RegEx的好工具:
它可以为你节省大量的时间和麻烦......
答案 4 :(得分:-1)
可能是“&lt;”和“&gt;”字符。在一些正则表达式语法中,它们是表示行的开头和结尾的特殊字符。
您可以查看regular expression tester工具来帮助您了解它们。