【问题标题】:Regarding the regex in search module with and without raw text关于搜索模块中带有和不带有原始文本的正则表达式
【发布时间】:2017-01-11 06:49:55
【问题描述】:

我在python2.7中做以下事情

>>> a='hello team 123'
>>> b=re.search('hello team [0-9]+',a)
>>>
>>> b
<_sre.SRE_Match object at 0x00000000022995E0>
>>> b=re.search(r'hello team [0-9]+',a)
>>> b
<_sre.SRE_Match object at 0x0000000002299578>
>>>

现在如您所见,在一种情况下我正在处理原始文本,而在另一种情况下则没有原始文本。

从 SO 上的一篇文章中,我了解到: r 表示该字符串将被视为原始字符串,这意味着所有转义码都将被忽略。

举个例子:

'\n' 将被视为换行符,而 r'\n' 将被视为字符 \ 后跟 n

那么,为什么我的示例适用于两种情况,即使用r 和没有r? 是不是因为我的例子都没有使用\

另外请看附件截图

【问题讨论】:

    标签: python regex text


    【解决方案1】:

    您没有在字符串中使用任何特殊字符,因此 r'''' 会做同样的事情。

    hello team [0-9]+ 中,没有什么需要逃避。它将按原样传递给正则表达式引擎。如果您在 Python 字符串中使用特殊字符,则需要转义它们以将它们传递给正则表达式引擎。

    正则表达式涉及两个级别的转义。第一级是 Python 字符串,第二级是正则表达式引擎。

    例如:

    '\\\\' --> Python(字符串翻译) ---> '\\' ---> 正则表达式引擎(翻译) ---> '\'

    为了避免 Python 字符串翻译,您使用原始字符串。

    r'\\' --> Python(字符串翻译) ---> '\\' ---> 正则表达式引擎(翻译) ---> '\'


    >>> print repr('\\')
    '\\'
    >>> print repr(r'\\')
    '\\\\'
    >>> print str('\\')
    \
    >>> print str(r'\\')
    \\
    

    【讨论】:

    • 当我做 r'\\' 我得到 '\\\\' 但是当我做 '\\' 我得到 '\\'。根据你所说,这种行为是预期的吗?请解释
    • 我不明白你是怎么得到'\\\\'的,当你这样做时r'\\'。进一步阐述。如果愿意,可以开始一个新问题。
    • 原谅我的无知..我已经编辑了我的问题..请看一下并确认
    • @fsociety 当你不使用 print 声明 repr() 方法被内部调用并且当你使用打印声明 str() 被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多