<p>另一个解决方案</p>
<pre><code>import re
s = r'lololol \r asdfasdf r\ gfhfgr'
pattern = re.compile('\\\\r (.*?) r\\\\')
print pattern.findall(s)
</code></pre>
<p>结果是<code>['asdfasdf']</code></p>
<p><strong>编辑:</strong></p>
<p>好吧,<em>伙计</em>,这就是你在你的例子中想要的。如果您愿意,欢迎使用</p>
^{pr2}$
<p>它会给你<code>[' asdfasdf ']</code>。在</p>
<p>“All the slashes”是必需的,因为Python和re解析字符串的方式不同;斜杠用作有向图的转义符,如<code>\n</code>(换行符)。{cd4>你必须用斜杠来表示。请尝试<code>print('\\')</code>查看此内容。在</p>
<p>然后必须将其加倍,因为根据字符串本身的一组有向图(对于数字,\s表示空白,等等)重新解析字符串。因此,如果输入<code>'\\\\'</code>,Python将其理解为一个由两个斜杠组成的字符串,<code>\\</code>,它传递给re,re解析它并认为您在寻找一个<code>\</code>字符。在</p>
<p>有时,您可以不这样做;如果您有一个类似<code>'\m'</code>的字符串,其中尾随字符没有生成有效的有向图,那么结果实际上是两个字符的字符串<code>\m</code>(请尝试<code>print('\m')</code>)。\r有点古怪;Python将其识别为回车有向图,但re不使用\r作为有向图,因此给Python“\r”或“\\r”都会导致重新查找文本字符串“\r”。我更喜欢双双斜杠,因为这意味着你不必记住两个不同的定义,什么是合法有向图,什么是非法有向图!另一方面,Python和re都将\'识别为单引号有向图(<code>print('\'')</code>打印一个<code>'</code>字符),因此这两个斜杠都必须完全双转义,否则您将得到一个“嘿,字符串的其余部分在哪里?”错误(“字符串未终止”)。在</p>
<p>另一种方法是输入原始字符串(<code>r'abc'</code>);这告诉Python不要解析字符串中的有向图,但re仍然会这样做,因此您的模式必须看起来像</p>
<pre><code>pattern = re.compile(r'\\r(.*?)r\\')
</code></pre>