你似乎很困惑。
“字符串文字”是您键入到程序中的字符串。因为你的字符串需要有一个清晰的开始和结束,所以某些字符在字符串中间变得不方便,并且必须使用转义序列来表示它们。
Python提供了'原始'字符串文字,它们对于转义序列的解释有着不同的规则:相同的规则用于确定字符串结尾的位置(所以一个反斜杠,后面跟着开头引号字符, t终止字符串),但是然后反斜杠之间的东西不会被转换。因此,虽然'\''
是一个由单引号字符组成的字符串(中间的\'
是生成引号的转义序列),但r'\''
是一个由反斜杠和引号字符组成的字符串。
原始字符串文字生成str
类型的对象。它与普通的字符串文字相同。这些通常用于模式的正则表达式操作,因为用于正则表达式的字符串通常需要包含大量反斜杠。如果你想编写一个匹配源文本中反斜杠的正则表达式,并且你没有原始字符串文字,那么你需要在源代码中引用四个反斜杠:Python编译器会将其解释为包含两个真正反斜杠的字符串,这反过来在正则表达式语法中表示“匹配反斜杠”。
您发现的功能是将转义序列重新引入输入文本的不完美尝试。 这不是你想做什么,甚至没有意义,也不符合作者自己的规范。这似乎是基于类似于你自己的一种误解。 “原始等价”字符串的概念是无意义的。真的,没有这样的东西,“原始字符串”;原始字符串文字是创建普通字符串的一种方便。
您想搜索htmlSource
中的模式。它已经在你需要它的形式在。您的问题有与字符串转义无关。 当字符串来自用户输入,文件输入或基本上除程序源以外的任何其他字符串时,它不会像字符串文字一样处理,除非您明确地安排这种情况发生。如果网页中包含反斜杠,后跟n,则在urllib
处读取的字符串在相应位置中包含 - 反斜杠,后跟n,而不是换行符。
问题如下:你想要搜索这个字符串,就像你说的:“当我搜索它的字符串的时候”。您目前是匹配的字符串。请参阅文档:
Help on function match in module re:
match(pattern, string, flags=0)
Try to apply the pattern at the start of the string, returning
a match object, or None if no match was found.
你的模式不会出现在字符串的开头,因为该网页的HTML不与<a>
标签您正在寻找的开始。您需要m=re.search(r"<a href.*?pdf[^>]*?", htmlSource)
。
你使用正则表达式而不是[真正的HTML解析器](http://www.crummy.com/software/BeautifulSoup/)的任何原因? –
这部分的内容也只是我在正则表达式中的一个练习 – randomafk
这个问题并不是真的关于“Python原始文字”,是吗? – Johnsyweb