【发布时间】:2016-06-18 19:19:50
【问题描述】:
我一直在阅读很多问题以找到答案,如果我错过了,我很抱歉。
假设我有一个只包含换行符的文本。text ='\n'
因为正则表达式使用反斜杠字符 ('\') 来转义 Python 等特殊含义字符,所以我们将使用原始字符串表示法匹配换行符,就像 answer 建议的那样。 (如果我错了,请纠正我)
所以我们将使用regex = re.compile(r'\n'),正则表达式解析器可以读取反斜杠和字符“n”并将其解释为换行符。
我的问题是为什么
regex = re.compile('\n')也可以工作?
我尝试做regex.match(text),结果是<_sre.SRE_Match object; span=(0, 1), match='\n'>,这与原始字符串表示法相同。
是不是因为here写的文件?其中说:
Python 字符串文字支持的大多数标准转义也被正则表达式解析器接受: \a \b \f \n \r \t \v \x \\
谁能详细解释一下?
【问题讨论】:
-
我认为您的问题是二合一的答案。正则表达式引擎实际上能够搜索文字换行符。
-
由文字
'\n'产生的字符串不包含反斜杠。它包含一个换行符。换行符没有任何特殊的正则表达式含义。 -
@WiktorStribiżew 我只是对它的工作原理感到困惑......所以我期待更详细的解释
-
@khelwood 这是否意味着 \a \f \r \t \v \x \\ 也会起作用,因为它们对正则表达式没有特殊意义?
-
@LeO 如果你写(例如)
'\a\f\r\t\v\x00'作为字符串文字,它产生的字符串将不包含反斜杠,因此正则表达式解析器不会认为该字符串包含任何特殊的正则表达式字符.如果将 `\` 放在字符串文字中,则生成的字符串包含一个反斜杠,这对于正则表达式解析器确实具有特殊含义,具体取决于后面的字符。
标签: python regex python-3.x string-literals rawstring