推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
rogwan
V2EX  ›  Python

re.sub() 过滤反斜杠 \ 为什么要打三个反斜杠 \\\ 才行呢?

  •  
  •   rogwan · Sep 22, 2017 · 5190 views
    This topic created in 3337 days ago, the information mentioned may be changed or developed.

    一个字符串 string_a 中可能有反斜杠 \ 这个字符,用 re.sub()过滤掉它,为什么要打三个反斜杠 \\\ 才行呢? 这个 \ 到底谁在转义谁呀

    re.sub('[\\\]', 'repl', string_a)
    
    9 replies  •  2017-09-22 14:56:50 +08:00
    noe132
    noe132
    Sep 22, 2017 via Android
    1
    我想到了 JavaScript 的正则构造函数,如果要匹配 /得打 4 个
    new RegExp('////')
    noe132
    noe132
    Sep 22, 2017 via Android
    2
    斜杠打反了。。。
    charove
    charove
    Sep 22, 2017
    3
    bash [[]]也很反人类啊。
    rogerchen
    rogerchen
    Sep 22, 2017
    4
    善用 raw string,'[\\\]' --> r'\\',话说我很难理解为什么要用 '[]' 去把 \ 装起来
    rogwan
    rogwan
    OP
    Sep 22, 2017
    5
    @noe132 试了三个没问题,查了下,发现四个才是标准写法

    @rogerchen 因为除了反斜杠,还有其他的符号要一起,问题里省略了
    hahastudio
    hahastudio
    Sep 22, 2017❤️2
    6
    你确定不应该是 '[\\\\]' 么
    '[\\\]' 对应了 4 个字符,[ 是 [,\\ 是 \,\] 是 \]
    因为 python 在 escape 的时候,\ 后面接的字符不是有效的需转义的字符的话,\ 会被正常返回,所以

    >>> print '\]'
    \]
    >>> '[\\\]' == '[\\\\]'
    True
    >>> print '[\\\\]'
    [\\]

    至于为什么要两个 \,因为在 regex 里,想要表达字面 \ 需要转义
    rogwan
    rogwan
    OP
    Sep 22, 2017
    7
    @hahastudio 我上面的回复里修正了,标准的应该是 4 个,只是写三个好像现在的新解释器输出结果是一样的。
    Cooky
    Cooky
    Sep 22, 2017 via Android
    8
    尽量用 raw string,不然自己看都费尽
    Osk
    Osk
    Sep 22, 2017 via Android
    9
    为什么不用 raw string...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2860 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 05:15 · PVG 13:15 · LAX 21:15 · JFK 00:15
    ♥ Do have faith in what you're doing.