【问题标题】:Unable to search for '\\n' using regular expressions in python3 [duplicate]无法在python3中使用正则表达式搜索'\\n' [重复]
【发布时间】:2017-07-09 11:13:58
【问题描述】:
>>> import re
>>> a='''\\n5
... 8'''
>>> b=re.findall('\\n[0-9]',a)
>>> print(b)
['\n8']

为什么显示\n8 而不是\n5? 我第一次在\n 前面使用了\。 我发现在 python 的正则表达式中使用 raw string 有点令人困惑。对我来说,它似乎没有对结果做出任何改变

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    这是因为在字符串中,换行符被认为是单个字符。

    当您执行 \\n5 时,您正在转义 \,因此这实际上是在打印 \n5,而不是 Python 标准的换行符。

    当您搜索诸如 \\n[0-9] 之类的正则表达式时,在第一个 \ 中,您正在转义 \n regex 表达式,所以最后您正在寻找 @ 987654327@ 这是 Python 的换行符。这与字符串中的实际换行符匹配,但与 \\n 不匹配,\\n 是两个单独的字符,一个转义的 \ 和一个 n

    【讨论】:

    • 我如何在结果中得到 \\n5?
    • @VaibhavPandey 如果您想同时获得\\n5\n8,您可以使用非捕获组来检查两者之一:'(?:\\n|\\\\n)[0-9]'。如果您只想要\\n5,请包含双转义斜杠:'\\\\n[0-9]'
    【解决方案2】:

    \\n 不是换行符,它是带有 n 的转义反斜杠。

    >>> import re
    >>> a = '''\n5
    ... 8'''
    >>> a=re.findall('\\n[0-9]',a)
    >>> print(a)
    ['\n5', '\n8']
    

    【讨论】:

      【解决方案3】:

      因为\\n5 不是有效的换行符,它将打印\n5

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-12
        • 2016-04-21
        • 1970-01-01
        • 2018-05-18
        • 1970-01-01
        相关资源
        最近更新 更多