gpt4 book ai didi

Python - 在使用正则表达式查找句点(句号或 .)时,我应该使用字符串前缀 r 吗?

转载 作者:行者123 更新时间:2023-11-28 21:58:01 25 4
gpt4 key购买 nike

我想知道在使用 python 正则表达式查找句点(句号)时使用字符串前缀“r”或不使用时得到相同结果的原因。

在多次阅读数字来源(下面的链接)并在代码中进行试验以找到相同的结果(再次参见下文)后,我仍然不确定:

  1. 使用正则表达式查找句点时,使用字符串前缀“r”和不使用字符串前缀“r”有什么区别?
  2. 哪种方法被认为是使用带字符串前缀“r”或不带字符串前缀“r”的 python 正则表达式在字符串中查找句点的正确方法?

re.compile("\.").sub("!", "blah.")

'等等!'

re.compile(r"\.").sub("!", "blah.")

'等等!'

re.compile(r"\.").search("blah.").group()

'.'

re.compile("\.").search("blah.").group()

'.'

我看过的资源:

Python 文档:字符串文字 http://docs.python.org/2/reference/lexical_analysis.html#string-literals

Regular expression to replace "escaped" characters with their originals

Python regex - r prefix

r 前缀用于原始字符串 http://forums.udacity.com/questions/7000217/r-prefix-is-for-raw-strings

最佳答案

原始字符串表示法就是指定字符串值的表示法。当涉及到正常字符串表示法识别的反斜杠转义时,该表示法会产生不同的字符串值。因为正则表达式为反斜杠字符赋予意义,原始字符串表示法非常方便,因为它避免了使用过多的转义。

引自Python Regular Expression HOWTO :

The solution is to use Python’s raw string notation for regular expressions; backslashes are not handled in any special way in a string literal prefixed with 'r', so r"\n" is a two-character string containing '\' and 'n', while "\n" is a one-character string containing a newline. Regular expressions will often be written in Python code using this raw string notation.

\. 组合在常规 python 字符串中没有特殊含义,因此 '\.'< 的结果完全没有区别r'\.';您可以使用:

>>> len('\.')
2
>>> len(r'\.')
2

只有当反斜杠和其他字符在常规字符串表示法中具有特殊含义时,原始字符串才会有所不同:

>>> '\b'
'\x08'
>>> r'\b'
'\\b'
>>> len('\b')
1
>>> len(r'\b')
2

\b 组合有特殊意义;在常规字符串中,它被解释为退格字符。但是正则表达式将 \b 视为单词边界 anchor ,因此每次您想在正则中使用它时,都必须在 Python 字符串中使用 \\b表达。使用 r'\b' 可以更轻松地阅读和编写表达式。

正则表达式函数被传递给字符串; Python 解释字符串文字的结果。这些函数不知道您使用的是原始字符串文字语法还是普通字符串文字语法。

关于Python - 在使用正则表达式查找句点(句号或 .)时,我应该使用字符串前缀 r 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19249949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com