我正在搜索一个文本块,查找换行符后跟一段时间。
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的下一个搜索。为什么会发生这种情况,我该如何避免呢?
提前非常感谢。
答案 0 :(得分:1)
额外的斜线实际上并不是字符串的一部分 - 字符串本身根本没有改变。
以下是一个例子:
>>> pat = '\n\.'
>>> pat
'\n\\.'
>>> print pat
\.
正如您所看到的,当您打印pat时,它只有一个\
。当您转储字符串的值时,它使用__repr__
函数,该函数旨在明确地向您显示字符串中的内容,因此它会显示转义的字符版本。与\n
一样,换行符是转义版本,\\
是\
的转义版本。
你的正则表达式可能与你的预期不符,因为它中有一个实际的换行符,而不是文字字符串"\n"
(作为repr:"\\n"
)。
您应该将正则表达式设为原始字符串(如注释中所示)。
>>> pat = r"\n\."
>>> pat
'\\n\\.'
>>> print pat
\n\.
或者你可以逃避斜杠并使用
pat = "\\n\\."