python正则表达式搜索模式

时间:2014-09-12 21:23:22

标签: python regex

我正在搜索一个文本块,查找换行符后跟一段时间。

pat = '\n\.'
block = 'Some stuff here. And perhaps another sentence here.\n.Some more text.'

出于某种原因,当我使用正则表达式搜索我的模式时,它会改变pat的值(使用Python 2.7)。

import re
mysrch = re.search(pat, block)

现在,pat的值已更改为:

'\n\\.'

正在搞乱我使用pat的下一个搜索。为什么会发生这种情况,我该如何避免呢?

提前非常感谢。

1 个答案:

答案 0 :(得分:1)

额外的斜线实际上并不是字符串的一部分 - 字符串本身根本没有改变。

以下是一个例子:

>>> pat = '\n\.'
>>> pat
'\n\\.'
>>> print pat

\.

正如您所看到的,当您打印pat时,它只有一个\。当您转储字符串的值时,它使用__repr__函数,该函数旨在明确地向您显示字符串中的内容,因此它会显示转义的字符版本。与\n一样,换行符是转义版本,\\\的转义版本。

你的正则表达式可能与你的预期不符,因为它中有一个实际的换行符,而不是文字字符串"\n"(作为repr:"\\n")。

您应该将正则表达式设为原始字符串(如注释中所示)。

>>> pat = r"\n\."
>>> pat
'\\n\\.'
>>> print pat
\n\.

或者你可以逃避斜杠并使用

pat = "\\n\\."