python 原始字符串转义字符
python raw string escaping character
一个菜鸟问题。我正在阅读 python 中关于使用正则表达式的文档。我的印象是使用原始字符串会按原样处理 '\' 而不会将其后的任何内容视为转义序列。然而,在我正在阅读的示例中,
>>> phoneNumRegex = re.compile(r'(\(\d\d\d\)) (\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('My phone number is (415) 555-4242.')
>>> mo.group(1)
'(415)'
>>> mo.group(2)
'555-4242'
显然,作者已经用 '\' 转义了 '(' 。我想了解如何。我认为在 bring 处放置 'r' 对 '\' 没有什么不同。
是的,为了定义正则表达式,此代码转义了“(”,但 Python 解释器保留了字符串中的“\”。
如果不使用原始字符串文字形式定义它,您将不得不编写:
phoneNumRegex = re.compile('(\(\d\d\d\)) (\d\d\d-\d\d\d\d)')
原始字符串文字中的 \
是文字 \
,正是我们需要用来转义 shorthand 字符 类 和特殊正则表达式字符的。
(
是分组构造的开始,必须有一个未转义的结束 )
。 这些 (...)
从来都不是比赛的一部分 。 \(
和 \)
是文字 (
和 )
,它们是匹配的一部分。
将正则表达式引擎想象成一个交付字符串的客户。重新要求 \d
。当您使用“\d”时,Python 认为它是一个转义序列,如 \n
,但它不是,因此它保留了 \
,因为这是未知转义序列的默认行为,并且给重新引擎 \d
。当你写 r"\d"
时,Python 知道 \
是一个文字 \
并且很容易将 \d
提供给重新引擎。
一个菜鸟问题。我正在阅读 python 中关于使用正则表达式的文档。我的印象是使用原始字符串会按原样处理 '\' 而不会将其后的任何内容视为转义序列。然而,在我正在阅读的示例中,
>>> phoneNumRegex = re.compile(r'(\(\d\d\d\)) (\d\d\d-\d\d\d\d)')
>>> mo = phoneNumRegex.search('My phone number is (415) 555-4242.')
>>> mo.group(1)
'(415)'
>>> mo.group(2)
'555-4242'
显然,作者已经用 '\' 转义了 '(' 。我想了解如何。我认为在 bring 处放置 'r' 对 '\' 没有什么不同。
是的,为了定义正则表达式,此代码转义了“(”,但 Python 解释器保留了字符串中的“\”。
如果不使用原始字符串文字形式定义它,您将不得不编写:
phoneNumRegex = re.compile('(\(\d\d\d\)) (\d\d\d-\d\d\d\d)')
原始字符串文字中的 \
是文字 \
,正是我们需要用来转义 shorthand 字符 类 和特殊正则表达式字符的。
(
是分组构造的开始,必须有一个未转义的结束 )
。 这些 (...)
从来都不是比赛的一部分 。 \(
和 \)
是文字 (
和 )
,它们是匹配的一部分。
将正则表达式引擎想象成一个交付字符串的客户。重新要求 \d
。当您使用“\d”时,Python 认为它是一个转义序列,如 \n
,但它不是,因此它保留了 \
,因为这是未知转义序列的默认行为,并且给重新引擎 \d
。当你写 r"\d"
时,Python 知道 \
是一个文字 \
并且很容易将 \d
提供给重新引擎。